Gestern hatte ich bei Dustin Campbell einen interessanten Artikel gelesen:
Getting a little more graceful with generics.
Im wesentlich ging es darum, dass der C# Compiler beim Aufruf einer generischen Methode selbst schließt welchen Typ er verwenden soll. Er sieht sich einfach die Parameter beim Aufruf an.
Fast exakt dieses Beispiel hatte ich in meinem aktuellen Projekt bereits verwandt. Nur habe ich eine Warnung von der Code Analyse bekommen, dass ich mit meinem Code diesen Rückschluss verhindern würde (CA1004 Microsoft.Design Warning GenericMethodsShouldProvideTypeParameter). Stimmt aber nicht. Es funktioniert wunderbar.
Die Methode
public static void GenerischeMethode<T>(List<T> arg);
kann immer so aufgerufen werden:
GenerischeMethode<string>(new List<string>);
GenerischeMethode<int>(new List<int>);
Aber der Compiler kann durch Inference auch den Typ selbst ermitteln und diese Aufrufe funktionieren auch:
GenerischeMethode(new List<string>);
GenerischeMethode(new List<int>);
Die Warnung CA1004 geht davon aus, dass der generische Typ direkt als Parameter verwendet werden soll und nicht wie in diesem Fall indirekt über List<T>.
Dustin Campbell hat dieses Verhalten in
Microsoft bug? You decide! nach meinem Kommentar ausführlicher dargelegt.