C# benötigen Sie keine generischen Typparameter angeben, ob der Compiler es zum Beispiel entnehmen kann,:Warum unterstützt C# keine impliziten generischen Typen für Klassenkonstruktoren?
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();
Diese für anonyme Typen benötigt wird, wo man nicht weiß, was der Typ-Parameter sein würde (In Intellisense erscheint es als 'a
), weil es vom Compiler hinzugefügt wird.
Class-Level-Typ Parameter lassen Sie sich nicht Sie dies tun:
//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);
Warum nicht C# Unterstützung dieser Klasse Ebene generic Typinferenz?
Warum hat diese Frage eine Abstimmung, um dagegen als Duplikat von [Warum kann der C# -Konstruktor den Typ nicht schließen?] (http://stackoverflow.com/questions/3570167) wenn diese Frage zwei Jahre jünger ist? Sicher, das ist das Duplikat? – Keith
Ich denke, die andere Frage ist prägnanter, und es hat eine bessere Antwort. – Sam
@Sam - Ja, Eric Lipperts Antwort auf diese Frage ist maßgebend, aber ich denke nicht, dass beide Fragen geschlossen werden sollten. – Keith