我可以将ValueType扩展方法与
一起使用public static string ToStringN(this ValueType value)
{
return Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture);
}
但是我不能使用ValueType数组的扩展方法。
public static void FastReverse(this ValueType[] arr)
{
for (int i = 0; i < arr.Length / 2; i++)
{
ValueType tmp = arr[i];
arr[i] = arr[arr.Length - i - 1];
arr[arr.Length - i - 1] = tmp;
}
}
答案 0 :(得分:2)
如您所见,它可以起作用:
public static string ToStringN(this ValueType value)
{
return Convert.ToString(value, System.Globalization.CultureInfo.InvariantCulture);
}
// usage:
int a = 10;
a.toStringN();
这是因为int
是ValueType
,所以ValueType
,int
的任何扩展方法也都有它。
但是,如果您使用ValueType[]
的扩展方法,
public static void FastReverse(this ValueType[] arr)
{
for (int i = 0; i < arr.Length / 2; i++)
{
ValueType tmp = arr[i];
arr[i] = arr[arr.Length - i - 1];
arr[arr.Length - i - 1] = tmp;
}
}
// usage:
int[] a = {1,2,3};
a.FastReverse(); // Can't find this method!
这是因为int[]
和ValueType[]
彼此不是子类型。例如,它不会编译:
ValueType[] a = new int[10];
一种解决方法是使用泛型并将参数约束为struct
:
public static void FastReverse<T>(this T[] arr) where T: struct
{
for (int i = 0; i < arr.Length / 2; i++)
{
T tmp = arr[i];
arr[i] = arr[arr.Length - i - 1];
arr[arr.Length - i - 1] = tmp;
}
}
这可能不完全是您想要的行为,因为它不适用于int?[]
。