.NET 数组之间进行转换 Array.ConvertAll
从上述代码可以看出,二者实现了相同的功能,但是Array.ConvertAll不需要我们手动地遍历数组,也不需要生成一个临时的容器对象,更突出的优势是它可以接受一个动态的算法作为具体的转换逻辑。当然,明眼人一看就知道,它是以一个委托的形式作为参数传入,这样的机制保证了Array.ConvertAll具有较高的灵活性。
·
数组是引入类型
// 编译成功
string[] sz = { "a", "a", "a" };
object[] oz = sz;
// 编译失败,值类型的数组不能被转换
int[] sz2 = { 1, 2, 3 };
object[] oz2 = sz;
// 编译失败,两者维数不同
string[,] sz3 = { { "a", "b" }, { "a", "c" } };
object[] oz3 = sz3;

class Program
{
static void Main(string[] args)
{
String[] times ={"2008-1-1",
"2008-1-2",
"2008-1-3"};
// 使用不同的方法转换
DateTime[] result1 = OneByOne(times);
DateTime[] result2 = ConvertAll(times);
// 结果是相同的
Console.WriteLine("手动逐个转换的方法:");
foreach (DateTime item in result1)
{
Console.WriteLine(item.ToString("yyyy-MM-dd"));
}
Console.WriteLine("使用Array.Convert方法:");
foreach (DateTime item2 in result2)
{
Console.WriteLine(item2.ToString("yyyy-MM-dd"));
}
Console.ReadKey();
}
// 逐个手动转换
private static DateTime[] OneByOne(String[] times)
{
List<DateTime> result = new List<DateTime>();
foreach (String item in times)
{
result.Add(DateTime.Parse(item));
}
return result.ToArray();
}
// 使用Array.ConertAll方法
private static DateTime[] ConvertAll(String[] times)
{
return Array.ConvertAll(times,
new Converter<String, DateTime>
(DateTimeToString));
}
private static DateTime DateTimeToString(String time)
{
return DateTime.Parse(time);
}
}
从上述代码可以看出,二者实现了相同的功能,但是Array.ConvertAll不需要我们手动地遍历数组,也不需要生成一个临时的容器对象,更突出的优势是它可以接受一个动态的算法作为具体的转换逻辑。当然,明眼人一看就知道,它是以一个委托的形式作为参数传入,这样的机制保证了Array.ConvertAll具有较高的灵活性。


更多推荐


所有评论(0)