更新:我應該在原文中提到我想在此處瞭解有關泛型的更多信息。我知道這可以通過修改基類或創建一個兩個文檔類實現的接口來完成。但爲了這個練習,我只對真正感興趣的解決方案不需要對文檔類或其基類進行任何修改。我認爲這個問題涉及擴展方法的事實會暗示這一點。如何重構這些泛型方法?
我寫了兩個幾乎相同的通用擴展方法,並試圖弄清楚如何將它們重構爲單一方法。它們的不同之處僅在於列表和列表上的其他操作,而我感興趣的屬性是AssetDocument的AssetID和PersonDocument的PersonID。雖然AssetDocument和PersonDocument具有相同的基類,但每個類中都定義了這些屬性,所以我認爲這沒有幫助。我曾嘗試
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>, List<AssetDocument>
思維話,我也許能測試類型,採取相應的行動,但是這導致了語法錯誤
類型參數「T」繼承 衝突的約束
這些是我想重構成單一方法的方法,但也許我只是過度了,他們最好保持原樣。我想聽聽你的想法。
public static string ToCSVList<T>(this T list) where T : List<AssetDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.AssetID.ToString());
delimiter = ",";
}
return sb.ToString();
}
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.PersonID.ToString());
delimiter = ",";
}
return sb.ToString();
}
做AssetDocument和PersonDocument派生自一個通用的基類/接口? – Preets 2010-03-12 10:31:34