我正在尝试构建一个泛型方法和四个实现IDetail
的类。每个类都有一个实现ITaxes
的类的集合。我想构建一个通用方法,允许我访问每个类的集合。
这样的事情:
public void UpdateCollection<T,I>(T Detail,Taxes TaxesList ) where T:IDetail where I:Itaxes
{
foreach( Taxes tax in TaxesList)
{
Detail.I.Add(tax);
}
}
我想访问I
类型中T
类型的媒体资源。我怎样才能做到这一点?有可能的?
我是否需要为每个类编写一个方法?
答案 0 :(得分:4)
理想情况下,您需要修改IDetail
接口,以包含ITaxes
对象列表作为该接口的一部分。如果希望公开公开的命名属性对每个细节具有不同的名称,则可以使用显式接口实现。
如果这是不可能的,或者由于其他原因没有意义,那么最好的办法是让这个方法接受此方法的Func<T, I>
参数。然后,用户可以提供一种方法,允许您从每个T
对象中提取所需的列表:
public void UpdateCollection<T, I>(T Detail, Taxes TaxesList, Func<T, I> taxSelector)
where T : IDetail
where I : Itaxes
{
I taxList = taxSelector(Detail);
foreach (Taxes tax in TaxesList)
{
taxList.Add(tax);
}
}
调用者可以使用lambda为该对象定义适当的属性。
答案 1 :(得分:0)
创建第三个界面,展示您所寻求的共性。在部分类(如果生成)中订阅接口,然后在泛型方法中仅接受该接口并相应地处理。