繁体   English   中英

Array.ForEach无法从使用情况推断数组元素类型

[英]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对象的数组。 最初,任何数组插槽中的nullnull (假设MyType是一个类)。

另外,我将避免使用Array.ForEach方法,我更喜欢使用简单的for或foreach循环,或者在这种特殊情况下,使用List.AddRange方法:

intList.AddRange(arr.Select(x=> x.MyProperty));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM