簡體   English   中英

C#-為泛型函數重載定義首選項

[英]C# - Define preference for generic function overloads

我有一個非常簡單的遞歸定義的函數,該函數可以打印出任何定義為列表的內容;

    static string ShowList<T>(IEnumerable<T> iterable)
    {
        return "[" + string.Join(", ", iterable.Select(e => ShowList(e))) + "]";
    }

    static string ShowList(string str)
    {
        return $"\"${str}\"";
    }

    static string ShowList<T>(T elem)
    {
        return elem.ToString();
    }

如您所見,最低的替代是適用於所有參數的catch全部。 最高的重載僅適用於可枚舉的參數。 理想情況下,我希望它首先檢查並運行最具體的重載,然后如果它們全部失敗,請使用一般情況。 但是我發現,在一般情況下,它總是立即可用,並且只打印出Systems.Generic.Containers.List1[] 是否可以給某些重載賦予比其他重載更高的優先級,以便編譯器將自動在其他重載之前進行嘗試?

在我看來,由於e (在iterable.Select的委托中)的類型為T,因此編譯器將使用類型T重載。 我建議,既然ShowList(e.ToString())就是返回ToString()方法,請消除它,並將委托中的調用更改為ShowList(e.ToString()) 如果ToString()被重載,則很可能會獲得有意義的數據,否則將獲得對象類型的數據。

至於發送List<List<T>>您將需要不同的重載,而這個重載是不會接受的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM