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

е требует, чтобы вы указали параметр универсального типа, если компилятор может вывести его, например:

List<int> myInts = new List<int> {0,1,1,
    2,3,5,8,13,21,34,55,89,144,233,377,
    610,987,1597,2584,4181,6765};

//this statement is clunky
List<string> myStrings = myInts.
    Select<int,string>( i => i.ToString() ).
    ToList<string>();

//the type is inferred from the lambda expression
//the compiler knows that it's taking an int and 
//returning a string
List<string> myStrings = myInts.
    Select( i => i.ToString() ).
    ToList();

Это необходимо для анонимных типов, где вы не знаете, каким будет параметр типа (в intellisense он отображается как'a) потому что это добавлено компилятором.

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

//sample generic class
public class GenericDemo<T> 
{
    public GenericDemo ( T value ) 
    {
        GenericTypedProperty = value;
    }

    public T GenericTypedProperty {get; set;}
}

//why can't I do:
int anIntValue = 4181;
var item = new GenericDemo( anIntValue ); //type inference fails

//however I can create a wrapper like this:
public static GenericDemo<T> Create<T> ( T value )
{
    return new GenericDemo<T> ( value );
}

//then this works - type inference on the method compiles
var item = Create( anIntValue );

Почему C # не поддерживает этот вывод обобщенного типа на уровне класса?

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

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