仅通过包含行ToArray()
,就可以从List<T>
接口的引用中调用IList<T>
类的using System.Linq
方法。但是,如果没有Linq命名空间,代码将显示错误消息,“ IList接口中没有这样的方法”。
将C#与.NET Core一起使用。
IList<int> l = new List<int>();
...
int[] arr = (int[])l.ToArray(typeof(int));
答案 0 :(得分:0)
我找不到带有参数的ToArray()
。
此代码:
int[] arr =l.ToArray();
int[] arr2 = (int[])l.ToArray();
等效于此:
int[] array = Enumerable.ToArray(l);
int[] array2 = Enumerable.ToArray(l);
IL代码:插入IL_0008
和IL_000f
的部分
IL_0000: nop
IL_0001: newobj instance void class [mscorlib]System.Collections.Generic.List`1<int32>::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: call !!0[] [System.Core]System.Linq.Enumerable::ToArray<int32>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>)
IL_000d: stloc.1
IL_000e: ldloc.0
IL_000f: call !!0[] [System.Core]System.Linq.Enumerable::ToArray<int32>(class [mscorlib]System.Collections.Generic.IEnumerable`1<!!0>)
IL_0014: stloc.2
IL_0015: ret
在其上使用F1将带您到MSDN文档:
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.toarray?view=netframework-4.7.2
指出它在名称空间中:
System.Linq
。
IList
仅提供以下方法:
Add(Object)
,
Clear()
,
Contains(Object)
,
CopyTo(Array, Int32)
,
GetEnumerator()
继承自ICollection
,
IndexOf(Object)
继承自IEnumerable
,
Insert(Int32, Object)
,
Remove(Object)
,
RemoveAt(Int32)
。
答案 1 :(得分:0)
如评论中所述,ToArray()是可在System.Linq命名空间中的IList上使用的扩展方法。
IList没有此功能,而List有此功能的原因。是因为List类定义了ToArray()方法,而IList没有定义。这将解释IList.ToArray()上的错误