[英]Array.ForEach cannot infer array element type from usage
public class MyType
{
public int SomeProperty { get; set; }
}
public class CustomArray
{
public MyType this[int index]
{
//some code
}
}
var intList = new List<int>();
var arr = new CustomArray();
Array.ForEach(arr, x => intList.Add(x.MyProperty));
这不会编译说:
无法从用法中推断方法void System.Array.ForEach(T [],Action)的类型参数。
怎么可能?
CustomArray
类型不是数组,而是具有索引属性的自定义类型。
ForEach<T>
方法期望一个数组,其元素类型为T
,但没有得到一个。
仅仅因为您可以在array和一个索引属性上使用相同的运算符( []
),并不意味着它们是同一回事。 例如,数组本质上是顺序的,这意味着如果a[0]
和a[2]
存在,则意味着存在a[1]
。 另一方面,索引属性更像是获取参数的方法,并且可以随心所欲地随意处理它。
如果要声明MyType
对象的数组,则无需执行任何特殊的声明,只需执行以下操作:
var arr = new MyType[10];
现在您有了一个可以容纳10个MyType
对象的数组。 最初,任何数组插槽中的null
为null
(假设MyType
是一个类)。
另外,我将避免使用Array.ForEach
方法,我更喜欢使用简单的for或foreach循环,或者在这种特殊情况下,使用List.AddRange
方法:
intList.AddRange(arr.Select(x=> x.MyProperty));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.