此方法声明在哪里

本文关键字:在哪里 声明 此方法 | 更新日期: 2023-09-27 18:22:28

我正在为C#寻找行细化代码,我发现的链接如下

张素恩细化算法C#

最后一个答案是一系列代码,其中一部分是深度克隆函数

public static T[][] ArrayClone<T>(T [][] A) 
{ 
     return A.Select(a => a.ToArray()).ToArray();
}

有人知道A是什么类的吗?因为当我尝试使用这个代码时,A.Select不起作用,因为我从未创建过这个类,而且代码也没有提到这一点。有其他方法可以细化线条吗?

此方法声明在哪里

"不起作用"是什么意思?如果您收到"不包含定义…并且找不到扩展方法…消息,那么您所缺少的只是位于要使用代码的模块顶部的using System.Linq;

注意,A根本不是一个类。它是参数的名称。IMHO,这是一个很好的例子,说明了为什么人们应该遵循更好的编码惯例。我们已经习惯于看到大写的类型名,当有人用大写写变量时,很难识别它是一个变量,即使理论上应该很清楚它只是基于它的位置(编译器对此没有问题,但人类对此有很大的问题)。

也许这个版本的方法会更清楚地表明实际发生了什么:

public static T[][] ArrayClone<T>(T [][] array) 
{ 
     return array.Select(subArray => subArray.ToArray()).ToArray();
}

也就是说,您有一个名为ArrayClone的通用方法。此方法的泛型类型参数为T。该方法的唯一参数名为array(在您查看的版本中为A),参数的类型为T[][],其中T是实际传递给该方法的对象的编译时基数组类型。

另一种编写方法的方法是:

public static T[][] ArrayClone<T>(T [][] array) 
{ 
     return System.Linq.Enumerable.ToArray(
         System.Linq.Enumerable.Select(array,
             subArray => System.Linq.Enumerable.ToArray(subArray)));
}

也就是说,如果没有使扩展方法可见的using指令,您可以直接调用静态方法。它是在System.Linq.Enumerable类中实现的。