Iam*_*mIC 2 .net c# arrays extension-methods class
我对类扩展非常熟悉,但并不期望以下行为.
我期望以下扩展System.Array,但它没有.相反,它扩展了System.Array的实例.为什么?
public static T[] Concatenate<T>(this Array value1, Array value2)
{
int l1 = value1 == null ? 0 : value1.Length;
int l2 = value2 == null ? 0 : value2.Length;
T[] result = new T[l1 + l2];
if (l1 > 0)
{
Array.Copy(value1, 0, result, 0, l1);
}
if (l2 > 0)
{
Array.Copy(value2, 0, result, l1, l2);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
...
阵列.//没有连接
string[] s = new string[1];
s.Concatenate<string>... // appears here
Run Code Online (Sandbox Code Playgroud)
因为您只能为类型实例定义扩展方法.要调用它们,您可以使用像语法一样的实例方法调用
var result = s.Concatenate(t);
Run Code Online (Sandbox Code Playgroud)
或标准的静态方法调用语法
var result = ArrayExtensions.Concatenate(s, t);
Run Code Online (Sandbox Code Playgroud)
同样,你不能Array
只为实例添加方法Array
(实际上,你没有添加方法,它只是一个编译技巧,使它看起来像你做的那样).
顺便说一下,我只想把你的方法写成
return value1.Concat(value2).ToArray();
Run Code Online (Sandbox Code Playgroud)