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.


Anmelden zum Antworten