1
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) 的类型参数无法从用法中推断出来。

怎么可能?

4

1 回答 1

5

CustomArray类型不是数组,它是具有索引属性的自定义类型。

ForEach<T>方法需要一个具有 type 元素的数组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));
于 2013-09-11T12:47:41.917 回答