Неоднозначный вызов между двумя универсальными методами расширения C #: один - где T: class, а другой - где T: struct

Рассмотрим два метода расширения:

public static T MyExtension<T>(this T o) where T:class
public static T MyExtension<T>(this T o) where T:struct

И класс:

class MyClass() { ... }

Теперь вызовите метод расширения в экземпляре вышеуказанного класса:

var o = new MyClass(...);
o.MyExtension(); //compiler error here..
o.MyExtension<MyClass>(); //tried this as well - still compiler error..

Компилятор говорит, что вызов метода является неоднозначным, когда я вызываю его в классе. Я бы подумал, что он может определить, какой метод расширения следует вызывать, поскольку MyClass - это класс, а не структура?

45
задан Kobi 25 October 2010 в 11:20
поделиться