[英]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.