此方法声明在哪里
本文关键字:在哪里 声明 此方法 | 更新日期: 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
类中实现的。