声明了这个方法在哪里?

时间:2015-11-17 22:00:31

标签: c#

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

Zhang-Suen thinning algorithm C#

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

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

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

1 个答案:

答案 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类中实现的。