我正在寻找C#的行细化代码,我发现的链接如下所示
Zhang-Suen thinning algorithm C#
在最后一个答案中有一系列代码,其中一部分是深度克隆函数,
public static T[][] ArrayClone<T>(T [][] A)
{
return A.Select(a => a.ToArray()).ToArray();
}
任何人都知道什么类是A
?因为当我尝试使用此代码时,A.Select
不起作用,因为我从未创建过这个类,并且代码没有提到这一点。还有其他方法可以进行细线化吗?
答案 0 :(得分:1)
你是什么意思具体“不起作用”?如果您收到“不包含定义......并且找不到扩展方法......可以找到”消息,那么您想要使用代码的模块顶部的using System.Linq;
就是您所缺少的。
请注意,A
根本不是一个类。它是参数的名称。恕我直言,这是人们应该遵循更好的编码惯例的一个很好的例子。我们习惯于以大写形式看到类型名称,当有人以大写形式编写变量时,很难识别它是变量,即使在理论上它应该很清楚它只是基于它的位置(编译器没有)麻烦这个,但人类有很多麻烦)。
也许这个版本的方法会更清楚实际发生的事情:
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
类中实现的。