如何添加System.Array的.Net C#类扩展

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)

jas*_*son 5

因为您只能为类型实例定义扩展方法.要调用它们,您可以使用像语法一样的实例方法调用

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)

  • @IanC:我使用了[`System.Linq.Enumerable.Concat`](http://msdn.microsoft.com/en-us/library/bb302894.aspx). (2认同)