为什么新的[] {AnonymousType,AnonymousType}不能被转换为IEnumerable?

时间:2009-10-18 18:23:29

标签: c# anonymous-types

我有一个匿名类型的数组声明为:

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));

亲切的问候,

2 个答案:

答案 0 :(得分:9)

Convert.ChangeType方法需要IConvertible的实现 - 本质上是如何从源类型转换为目标类型的声明。 System.Array未实现IConvertible接口。

您要做的是从一种类型转换为另一种类型,而(IEnumerable)list效果非常好。

编辑:

正如乔恩所说,这里的演员是隐含的,所以对IEnumerable的简单赋值(即隐式转换)也有效。

答案 1 :(得分:4)

只需使用隐式转换即可:

IEnumerable enumerable = list;

正如Nader所说,Convert.ChangeType适用于IConvertible。就个人而言,我记不清上次使用它了 - 我会尽可能坚持简单的演员表等。

相关问题