class SwapTest { staticvoid Swap<T>(ref T left, ref T right) { T temp; temp = left; left = right; right = temp; } publicstaticvoid Main() { int a =1; int b =2; Swap(ref a, ref b);//Swap<int>(ref a,ref b); Console.WriteLine(a +","+ b); } }
class SampleClass<T> { void Swap(ref T lhs, ref T rhs) { } }
如果定义的泛型方法接受与包含类相同的类型参数,编译器将生成警告 CS0693,因为在方法范围内,为内部 T 提供的参数将隐藏为外部 T 提供的参数。除了类初始化时提供的类型参数之外,如果需要灵活调用具有类型参数的泛型类方法,请考虑为方法的类型参数提供其他标识符,如下面示例中的 GenericList2<T> 所示。
class GenericList1<T> { // CS0693 void SampleMethod<T>() { } } class GenericList2<T> { //No warning void SampleMethod<U>() { } }
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> { T temp; if (lhs.CompareTo(rhs) >0) { temp = lhs; lhs = rhs; rhs = temp; } }