List <T>构造函数(IEnumerable <T>)不接受从Array.CreateInstance(Type,Int32)创建的数组

黄嘉仪

我是编程和.net的新手,我很难理解为什么使用List<T>(IEnumerable<T>)构造函数会接受使用创建的数组[],但不接受使用创建的数组Array.CreateInstance(Type, Int32)

这是有效的方法:

DirectoryInfo[] dirsArray = foo.GetDirectories();
List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);

这里不是:

 Array dirsArray = Array.CreateInstance(typeof(DirectoryInfo), 10); //assume we know 10 is the required length
 List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);

上面给出了以下编译器错误:

Error   1   The best overloaded method match for 'System.Collections.Generic.List<System.IO.DirectoryInfo>.List(System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>)' has some invalid arguments

Error   2   Argument 1: cannot convert from 'System.Array' to 'System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>'

但我知道List<T>(IEnumerable<T>)可以接受任何IEnumerable参数。我知道那System.ArrayIEnumerable不仅因为该引用在参考中,而且还因为使用[]构造函数语法的第一个示例运行良好。

那么,这是什么问题呢?是否Array.CreateInstance以某种方式设法创建了一个不是的数组IEnumerable

塞尔曼·杨(Selman Young)

Array类本身不是一个IEnumerable<T>。您将需要强制转换Array.CreateInstance

var dirsArray = (DirectoryInfo[]) Array.CreateInstance(typeof(DirectoryInfo), 10);

Array是所有数组类型的基类,并且在运行时IEnumerable<T>提供的实现,因此无法IEnumerable<T>在编译时使用Array MSDN

从.NET Framework 2.0开始,Array类实现System.Collections.Generic.IList<T>System.Collections.Generic.ICollection<T>以及System.Collections.Generic.IEnumerable<T>通用接口。这些实现是在运行时提供给数组的,因此,通用接口不会出现在Array类的声明语法中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 List.AddRange 接受 T[] 但不接受 IEnumerable<T>

来自分类Dev

创建集合时,C#List <IList>如何接受List <T>而不接受IList <T>?

来自分类Dev

使用UpdateRange(IEnumerable <T>)时,可以利用List <T>函数Remove(T)和Insert(Int32,T)的优势吗?

来自分类Dev

通用构造函数接受类型T的类对象,并返回T,这次T是一个List

来自分类Dev

List <T>与IEnumerable <T>

来自分类Dev

List <T>与IEnumerable <T>

来自分类Dev

T-SQL创建表语句将不接受变量

来自分类Dev

如何在类构造函数参数中使用IEnumerable <T>

来自分类Dev

具有List <T>的Java通用接口不接受对象类型

来自分类Dev

从枚举构造List <T>

来自分类Dev

为什么随机访问迭代器的算术运算符接受/返回int而不接受size_t?

来自分类Dev

T型构造函数

来自分类Dev

无法在实体框架中将 IEnumerable<int> 转换为 List<T>

来自分类Dev

将list <T>或数组作为IEnumerable类型的参数传递

来自分类Dev

List <T>与数组性能

来自分类Dev

C#List <T> RemoveAt(int32)函数删除2d列表中每个列表的所有索引,而不仅仅是指定的列表

来自分类Dev

出现错误“无法将构造函数实例化为预期的类型;找到了:(T1,T2)必需:List [(Char,Int)]”

来自分类Dev

为什么List <T>(Int32)的.Count的初始大小为0?

来自分类Dev

IEnumerable为T []的数组

来自分类Dev

IEnumerable <T>与数组

来自分类Dev

Spark的Column.isin函数不接受List

来自分类Dev

当T = int&时,为什么构造函数Message(const T && data)与Message(T && data)冲突?

来自分类Dev

ARRAY [T,SIZE]适当的默认构造函数可用

来自分类Dev

IEnumerable <T> .Reverse和List <T> .Reverse之间的区别

来自分类Dev

仅在3.5中从List <T>到IEnumerable <T>的InvalidCastException

来自分类Dev

方法签名传递参数为IEnumerable <T>或List <T>

来自分类Dev

以静态方法将List <T>分配给IEnumerable <T>

来自分类Dev

Type t = Type()是否调用复制构造函数?

来自分类Dev

允许函数接受`T`或任何`FnMut(T)-> T`

Related 相关文章

  1. 1

    为什么 List.AddRange 接受 T[] 但不接受 IEnumerable<T>

  2. 2

    创建集合时,C#List <IList>如何接受List <T>而不接受IList <T>?

  3. 3

    使用UpdateRange(IEnumerable <T>)时,可以利用List <T>函数Remove(T)和Insert(Int32,T)的优势吗?

  4. 4

    通用构造函数接受类型T的类对象,并返回T,这次T是一个List

  5. 5

    List <T>与IEnumerable <T>

  6. 6

    List <T>与IEnumerable <T>

  7. 7

    T-SQL创建表语句将不接受变量

  8. 8

    如何在类构造函数参数中使用IEnumerable <T>

  9. 9

    具有List <T>的Java通用接口不接受对象类型

  10. 10

    从枚举构造List <T>

  11. 11

    为什么随机访问迭代器的算术运算符接受/返回int而不接受size_t?

  12. 12

    T型构造函数

  13. 13

    无法在实体框架中将 IEnumerable<int> 转换为 List<T>

  14. 14

    将list <T>或数组作为IEnumerable类型的参数传递

  15. 15

    List <T>与数组性能

  16. 16

    C#List <T> RemoveAt(int32)函数删除2d列表中每个列表的所有索引,而不仅仅是指定的列表

  17. 17

    出现错误“无法将构造函数实例化为预期的类型;找到了:(T1,T2)必需:List [(Char,Int)]”

  18. 18

    为什么List <T>(Int32)的.Count的初始大小为0?

  19. 19

    IEnumerable为T []的数组

  20. 20

    IEnumerable <T>与数组

  21. 21

    Spark的Column.isin函数不接受List

  22. 22

    当T = int&时,为什么构造函数Message(const T && data)与Message(T && data)冲突?

  23. 23

    ARRAY [T,SIZE]适当的默认构造函数可用

  24. 24

    IEnumerable <T> .Reverse和List <T> .Reverse之间的区别

  25. 25

    仅在3.5中从List <T>到IEnumerable <T>的InvalidCastException

  26. 26

    方法签名传递参数为IEnumerable <T>或List <T>

  27. 27

    以静态方法将List <T>分配给IEnumerable <T>

  28. 28

    Type t = Type()是否调用复制构造函数?

  29. 29

    允许函数接受`T`或任何`FnMut(T)-> T`

热门标签

归档