Generics überladen
-
Ich habe folgenden Code :
private static string ValueToString<T>(T value) where T : class { return value==null ? "" : value.ToString() ; } private static string ValueToString<T>(IEnumerable<T> value) where T : class { return value==null ? "" : String.Join(",",value) ; } private static string ValueToString<T>(Nullable<T> value) where T : struct { return !value.HasValue ? "" : value.Value.ToString() ; } var a=new string[] {"hello","world"} ; var x=ValueToString(a) ;
Warum wird mir mit einem Array immer die erste Funktion auf gerufen,
bzw. wie kann ich dass ändern.
Hoffe mein Problem ist klar.
-
case schrieb:
Warum wird mir mit einem Array immer die erste Funktion auf gerufen,
Weil es die einzige Funktion ist, die passt. Der konkrete Typ von a ist eben System.Array und nicht IEnumerable<T>. Auch wenn du eine List<T> übergibst, wird die erste Funktion aufgerufen.
bzw. wie kann ich dass ändern.
Zum Beispiel:
var a = new string[] { "hello", "world" }.AsEnumerable();
Oder:
IEnumerable<string> a = new string[] { "hello", "world" };
In beiden Fällen ist der statische Typ von a IEnumerable<string> und dann wird auch die zweite Funktion aufgerufen.
-
Danke,
Hab ich verstanden.