我正在尝试构建一个通用方法和四个实现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);
}
}
Run Code Online (Sandbox Code Playgroud)
I我想访问type 中type 的属性T。我怎样才能做到这一点?有可能的?我需要为每个类编写一个方法吗?
理想情况下,您应该修改您的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);
}
}
Run Code Online (Sandbox Code Playgroud)
调用者可以使用 lambda 为该对象定义适当的属性。