Взаимоисключающие ограничения для двух методов с одинаковой подписью

Таким образом, эти два метода имеют одну и ту же сигнатуру, но разные ограничения

public static void Method<T>(ref T variable) where T : struct { }

public static void Method<T>(ref T variable) where T : class { }

Но их нельзя определить в одном классе, потому что они имеют одинаковые подписи. Но в этом конкретном случае они взаимоисключающие. (Если я не прав в этом)

Я понимаю, что вы можете поставить дополнительные ограничения, кромеclass а такжеstruct но вы не можете указать обаstruct а такжеclass по тому же методу. Так почему бы это не скомпилировать?

 Buildstarted14 июн. 2012 г., 21:49
@johnnyGold нет, мне не нужно работать, но это было то, с чем мы столкнулись на работе, я нашел интересным и подумал спросить об этом здесь :)
 Anthony Pegram14 июн. 2012 г., 21:40
 bluevector14 июн. 2012 г., 21:39
У вас есть обходной путь, потому что я подумал об одном, если вам это нужно.
 Buildstarted14 июн. 2012 г., 21:44
@ AnthonyPegram спасибо, это то, о чем я не знал.
 user70301614 июн. 2012 г., 21:38
Ты сказал это сам,because they have the same signatures.

Ответы на вопрос(3)

Решение Вопроса

общие ограничения не считаются частью сигнатуры метода (Спасибо@Энтони по ссылке).

Что касается компилятора, у вас естьduplicate Метод - те же цифры и типы параметров.

 14 июн. 2012 г., 21:45
@ClaudioRedi Что-то, что может быть хорошим или плохим ... для больших дебатов, хотя ТАК.

чтобы понять это (что, кажется, не так), вы не знаете, что делатьobject (как это может бытьclass или жеstruct).

да. Но компилятор видит, что они имеют одно и то же «имя», отсюда и неоднозначность. & Quot; Имя & Quot; здесь означает «подпись метода».

 14 июн. 2012 г., 21:43
having the same name, hence the ambiguity. ????
 14 июн. 2012 г., 21:44
@ L.B & quot; имя & quot; разговорный термин для «сигнатуры метода»; Я должен быть более явным и не использовать сокращение от руки :)

Ваш ответ на вопрос