更新:我应该在原文中提到我想在此处了解有关泛型的更多信息。我知道这可以通过修改基类或创建一个两个文档类实现的接口来完成。但为了这个练习,我只对真正感兴趣的解决方案不需要对文档类或其基类进行任何修改。我认为这个问题涉及扩展方法的事实会暗示这一点。如何重构这些泛型方法?
我写了两个几乎相同的通用扩展方法,并试图弄清楚如何将它们重构为单一方法。它们的不同之处仅在于列表和列表上的其他操作,而我感兴趣的属性是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