更新:我应该在原始帖子中提到我想在这里学习更多关于泛型的知识。我知道可以通过修改基类或创建一个两个文档类都实现的接口来实现这一点。但是为了这个练习,我只对不需要修改文档类或其基类的解决方案感兴趣。我认为问题涉及扩展方法的事实已经暗示了这一点。
我编写了两个几乎相同的通用扩展方法,并尝试弄清楚如何将它们重构为单个方法。它们之间唯一的区别在于一个操作List,另一个操作List,并且我感兴趣的属性是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();
}