创建Array.ReturnLength()扩展方法?

时间:2014-03-14 15:51:31

标签: c# arrays extension-methods

我想为System.Array类创建一个扩展方法,该方法将接受char[]byte[]数组并返回其Length。我需要这个方法,以防数组为空,并且我不想在整个(arr == null) ? 0 : arr.Length次调用中乱丢代码。

我想这样称呼:Array.ReturnLength(arr)

我尝试实现它,但我只在arr.ReturnLength()时看到它,而不是作为Array方法。

public static int ReturnLength(this Array arr)
{
    if (arr == null)
        return 0;
    return arr.Length;
}

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用通用扩展方法:

public static int ReturnLength<T>(this T[] arr)
{
    if (arr == null)
        return 0;
    return arr.Length;
}

您可以将它与空引用一起使用:

string[] arr = null;
int length = arr.ReturnLength(); // 0

更新:但您的非通用扩展方法应该以相同的方式工作:

public static int ReturnLength(this Array arr)
{
    if (arr == null)
        return 0;
    return arr.Length;
}

这是有效的,因为扩展方法只是语法糖。实际上它们是静态方法,您也可以通过类名使用它们:

int length = MyExtensions.ReturnLength(arr);

In C#, what happens when you call an extension method on a null object?

答案 1 :(得分:1)

正如评论中所解释的,C#不允许使用静态扩展方法。 但是,扩展方法只是语法糖,你可以将它们作为静态方法调用它们在 中定义的类,而不是它们定义的对象的实例方法 on

您已经知道可以通过arr.ReturnLength()致电您的方法。您也可以通过MyExtensionsClass.ReturnLength(arr)调用它,其中MyExtensionsClass是定义ReturnLength的静态类。