2012-01-25 10 views
8

Powiel możliwe:
Generic constraints, where T : struct and where T : classNiezdolność do przeciążenia metody rodzajowe z ograniczeniami typu

Czy istnieje szczególny powód, że nie można przeciążać metod generycznych za pomocą wzajemnie wykluczające ograniczeń typu w C#? Na przykład, wykonaj następujące metody:

T DoSomething<T>(T arg) where T : class 
{ /* Do something */ } 

T DoSomething<T>(T arg) where T : struct 
{ /* Do something */ } 

i spróbować wywołać je

DoSomething("1"); 
DoSomething(1); 

Tak jak ja to widzę, doSomething() metody wykluczają się wzajemnie w miarę parametrów, które wezmą - pierwszy przyjmuje typ odniesienia, drugi wybiera typ wartości. Kompilator powinien być w stanie powiedzieć, że wywołanie DoSomething z argumentem łańcuchowym idzie do pierwszej metody, a wywołanie DoSomething z argumentem int przechodzi do drugiej metody.

Czy brakuje mi czegoś konceptualnego w przypadku generyków? Czy jest to tylko funkcja, która nie została zaimplementowana w C#?

+1

To duplikat tekst można poprawić dodając link do duplikatu odpowiedź. To naprawdę frustrujące, jeśli nie możesz znaleźć rozwiązania, a wyszukiwanie nie zwróci żadnych wyników ani sposobu, czyli zbyt wiele wyników. –

Odpowiedz

Powiązane problemy