具有多个泛型参数的 C# 方法

本文关键字:方法 参数 泛型 | 更新日期: 2023-09-27 18:35:30

我正在尝试构建一个通用方法和四个实现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 .我该怎么做?可能吗?我需要为每个类编写一个方法吗?

具有多个泛型参数的 C# 方法

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

创建第三个界面,以公开您所寻求内容的通用性。在分部类(如果生成)中订阅接口,然后在泛型方法中仅接受该接口并相应地进行处理。