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 []的类型参数, 无法从使用中推断出行动。
怎么可能?
答案 0 :(得分:5)
CustomArray
类型不是数组,它是具有索引属性的自定义类型。
ForEach<T>
方法需要一个类型为T
的数组,但它没有得到一个。
仅仅因为你可以在数组和索引属性上使用相同的运算符([]
),并不意味着它们是相同的。例如,数组本质上是连续的,这意味着如果存在a[0]
和a[2]
,则意味着存在a[1]
。另一方面,索引属性更像是获取参数的方法,并且可以随意使用它。
如果你想声明一个MyType
个对象的数组,你不需要做任何特殊的声明,你可以这样做:
var arr = new MyType[10];
现在你有一个可容纳10个MyType
个对象的数组。最初,任何数组插槽中的值都是null
(假设MyType
是一个类)。
另外我会避开Array.ForEach
方法,我更喜欢使用简单的for或foreach循环,或者在这种特殊情况下,可能使用List.AddRange
方法:
intList.AddRange(arr.Select(x=> x.MyProperty));