代码之家  ›  专栏  ›  技术社区  ›  SharePoint Newbie

为什么不能将新的[]匿名类型、匿名类型转换为IEnumerable?

  •  1
  • SharePoint Newbie  · 技术社区  · 16 年前

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

    var list = new[] 
    {
        new {Name = "A", Age = 10},
        new {Name = "B", Age = 15}
    }
    

    现在,列表继承自实现IEnumerable的类型数组。为什么以下失败:

    Convert.ChangeType(list, typeof(IEnumerable));
    

    这也失败了:

    Convert.ChangeType(list, typeof(Array));
    

    亲切的问候,

    2 回复  |  直到 16 年前
        1
  •  9
  •   Nader Shirazie    16 年前

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

    您要做的是从一种类型转换到另一种类型,并且 (IEnumerable)list 工作得很好。

    编辑:

    如jon所说,这里的强制转换是隐式的,因此对IEnumerable的简单赋值(即隐式强制转换)也有效。

        2
  •  4
  •   Jon Skeet    16 年前

    只需使用隐式转换即可:

    IEnumerable enumerable = list;
    

    正如纳德所说, Convert.ChangeType 作品与 IConvertible . 就我个人而言,我记不起上次使用它的时候了——我会尽可能坚持使用简单的石膏等。