C# 为什么只有ForEach for Array的静态/共享版本?

C# 为什么只有ForEach for Array的静态/共享版本?,c#,vb.net,arrays,generics,foreach,C#,Vb.net,Arrays,Generics,Foreach,请有人解释一下为什么只有ForEach for Array的静态/共享版本 IE: ForEach<T>(T array[], System.Action(Of T) action[]) IE:ForEach(T数组[],系统动作(Of T)动作[]) 我假设这与实现实例方法的类型推断要求有关,但是当您声明数组时,您提供了类型正确吗?您提供了T来告诉数组中可以包含什么。因为数组实现了ienumerable,所以它得到了它上面的ForEach扩展方法 你还要找别的东西吗 想知道Er

请有人解释一下为什么只有ForEach for Array的静态/共享版本

IE: ForEach<T>(T array[], System.Action(Of T) action[])
IE:ForEach(T数组[],系统动作(Of T)动作[])

我假设这与实现实例方法的类型推断要求有关,但是当您声明数组时,您提供了类型正确吗?

您提供了T来告诉数组中可以包含什么。因为数组实现了ienumerable,所以它得到了它上面的ForEach扩展方法

你还要找别的东西吗


想知道Erics post是否能帮助您

您可以提供T来告诉数组中可以包含什么。因为数组实现了ienumerable,所以它得到了它上面的ForEach扩展方法

你还要找别的东西吗


想知道Erics post是否能帮助您

数组的一个问题是,没有地方记录仅在“向量”上可用的实例方法。“向量”是一个以0为底的一维数组,因此在C#中可以表示为
T[]
的任何东西都是向量,但是
T[,]
不是

这意味着不是每个
数组的实例都应该有这个方法,即使它有,你会如何表示
T
?每个数组类型都是独立的,并且.NET中没有泛型类型,它是所有数组的基类。我们所得到的只是
数组

因此,假设我们必须在类型系统中的某个地方引入类型参数,并且假设我们也将其限制为“向量”类型,那么静态方法似乎是一种合适的解决方法

请注意,
List
的情况并非如此,我们已经有了type参数,因此可以创建一个简单的实例方法


使用
Array时也值得考虑。ForEach
实际上最终得到的代码比只使用
ForEach
循环更干净。我通常只在已经有一个委托在每个元素上执行时才使用它。否则,语言构造会感觉更干净,而且它毫无例外地返回或中断循环的能力肯定更灵活。

数组的一个问题是,没有地方记录仅在“向量”上可用的实例方法。“向量”是一个以0为底的一维数组,因此在C#中可以表示为
T[]
的任何东西都是向量,但是
T[,]
不是

这意味着不是每个
数组的实例都应该有这个方法,即使它有,你会如何表示
T
?每个数组类型都是独立的,并且.NET中没有泛型类型,它是所有数组的基类。我们所得到的只是
数组

因此,假设我们必须在类型系统中的某个地方引入类型参数,并且假设我们也将其限制为“向量”类型,那么静态方法似乎是一种合适的解决方法

请注意,
List
的情况并非如此,我们已经有了type参数,因此可以创建一个简单的实例方法


使用
Array时也值得考虑。ForEach
实际上最终得到的代码比只使用
ForEach
循环更干净。我通常只在已经有一个委托在每个元素上执行时才使用它。否则,语言构造会感觉更干净,而且它毫无例外地返回或跳出循环的能力肯定会更灵活。

你在谈论哪个
ForEach
扩展方法?erics谈论的ForEach。注意,框架中没有哪个。因此,对于大多数人来说,数组不会“获取”一个
ForEach
扩展方法。你必须自己提供一个。还要注意的是,
ForEach
通常是
IEnumerable
上的扩展方法,而不是
IEnumerable
,因此它实际上更多的是关于向量实现
IEnumerable
。。。如果你只有一个类型为
Array
的引用,你应该先调用
Cast()
of type()
。你甚至连Ops qs都有数组的东西,所以认为每个WU都是它的扩展。Jon是对的。数组不继承ForEach(T[],Action)扩展名。您可能会考虑List,它定义了ForEach(Action)签名,但它不是一个扩展方法,也不是继承的。您谈论的是哪个
ForEach
扩展方法?erics谈论的ForEach。请注意,框架中没有哪个。因此,对于大多数人来说,数组不会“获取”一个
ForEach
扩展方法。你必须自己提供一个。还要注意的是,
ForEach
通常是
IEnumerable
上的扩展方法,而不是
IEnumerable
,因此它实际上更多的是关于向量实现
IEnumerable
。。。如果你只有一个类型为
Array
的引用,你应该先调用
Cast()
of type()
。你甚至连Ops qs都有数组的东西,所以认为每个WU都是它的扩展。Jon是对的。数组不继承ForEach(T[],Action)扩展名。您可能会想到List,它定义了ForEach(Action)签名,但它既不是扩展方法,也不是继承的。