我有一个匿名类型的数组声明为:
var list = new[]
{
new {Name = "A", Age = 10},
new {Name = "B", Age = 15}
}
现在list继承自Array类型,它实现了IEnumerable。为什么以下失败:
Convert.ChangeType(list, typeof(IEnumerable));
这也失败了:
Convert.ChangeType(list, typeof(Array));
亲切的问候,
答案 0 :(得分:9)
Convert.ChangeType
方法需要IConvertible
的实现 - 本质上是如何从源类型转换为目标类型的声明。 System.Array
未实现IConvertible
接口。
您要做的是从一种类型转换为另一种类型,而(IEnumerable)list
效果非常好。
编辑:
正如乔恩所说,这里的演员是隐含的,所以对IEnumerable的简单赋值(即隐式转换)也有效。
答案 1 :(得分:4)
只需使用隐式转换即可:
IEnumerable enumerable = list;
正如Nader所说,Convert.ChangeType
适用于IConvertible
。就个人而言,我记不清上次使用它了 - 我会尽可能坚持简单的演员表等。