我想为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;
}
有什么想法吗?感谢。
答案 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
的静态类。