擴展方法中的泛型沒有什麼特別之處,它們的行爲與普通方法類似。
public static int GetLastIndex<T>(this T[] buffer)
{
return buffer.GetUpperBound(0);
}
根據你的評論,你可以不喜歡以下有效限制T
類型(增加防護語句)。
public static int GetLastIndex<T>(this T[] buffer) where T : struct
{
if (!(buffer is byte[] || buffer is ushort[] || buffer is uint[]))
throw new InvalidOperationException(
"This method does not accept the given array type.");
return buffer.GetUpperBound(0);
}
注意:正如Martin Harris在評論中指出的,您實際上並不需要在此使用泛型。所有數組派生的Array
類型就足夠了。
如果你想有一個更優雅的解決方案,在略多碼的成本,你可以只創建方法的重載:你在正常(非擴展做仿製藥
public static int GetLastIndex(this byte[] buffer)
{
return GetLastIndex(buffer);
}
public static int GetLastIndex(this ushort[] buffer)
{
return GetLastIndex(buffer);
}
public static int GetLastIndex(this uint[] buffer)
{
return GetLastIndex(buffer);
}
private static int GetLastIndex(Array buffer)
{
return buffer.GetUpperBound(0);
}
'arr.Length - 1'不夠好? – leppie 2010-08-19 12:26:38
在這種特殊情況下,您不需要*使用泛型:public static int GetLastIndex(this Array buffer)將起作用 – 2010-08-19 12:29:42