繁体   English   中英

具有多个通用参数的C#方法

[英]C# method with multiple generic parameters

我正在尝试构建一个泛型方法和四个实现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);
   } 
} 

我想在类型T访问类型I的属性。 我怎样才能做到这一点? 有可能的? 我是否需要为每个班级编写一种方法?

理想情况下,您将修改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为该对象定义适当的属性。

创建第三个界面,揭示您所寻求的共性。 在部分类(如果生成)中订阅接口,然后在泛型方法中仅接受该接口并相应地处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM