Можно создать дубликат:
Generic constraints, where T : struct and where T : classНевозможности перегружать общие методы с ограничениями типа
Есть ли конкретная причина, по которой вы не можете перегружать общие методы с использованием взаимоисключающих ограничений типа в C#? Например, возьмем эти методы:
T DoSomething<T>(T arg) where T : class
{ /* Do something */ }
T DoSomething<T>(T arg) where T : struct
{ /* Do something */ }
и попытаться вызвать их с
DoSomething("1");
DoSomething(1);
так, как я это вижу, DoSomething() методы являются взаимоисключающими, насколько параметры, которые они предпримут - первый принимает ссылочный тип, второй - тип значения. Компилятор должен иметь возможность сказать, что вызов DoSomething с аргументом строки переходит к первому методу, а вызов DoSomething с аргументом int переходит ко второму методу.
Я пропустил что-то концептуально с дженериками здесь? Или это просто функция, которая не была реализована на C#?
Этот дубликатом текст может быть улучшена путем добавления ссылки на дубликате ответа. Это очень неприятно, если вы не можете найти решение, и поиск не возвращает никаких результатов или путей, слишком много результатов. –