根据通用参数将记录添加到ICollection

时间:2019-04-05 10:46:24

标签: c# generics dynamic

是否有一种方法可以访问基于通用类型ICollection作为选择器的记录上的(T)

我有一个名为Job的类,它具有大量ICollection的答案。

public class Job
{
    public ICollection<OperationAnswer> OperationAnswers { get; set; }
    public ICollection<ElectricalAnswer> ElectricalAnswers { get; set; }  
}

我希望能够根据传递给方法的通用类型参数ICollections向这些答案(T)添加项目。

当前,我必须执行if语句来检查通用类型(T),然后手动访问正确的答案集合以添加新记录。这是一个例子。

if (typeof(T) == typeof(ElectricalAnswer))
{
    job.ElectricalAnswers.Add(new ElectricalAnswer
    {

    });
}
else if (typeof(T) == typeof(OperationAnswer))
{
    job.OperationAnswers.Add(new OperationAnswer
    {

    });
}

是否可以在AddToAnswerCollection扩展方法知道要使用哪个答案集合的情况下执行类似的操作?

jobStageZone.AddToAnswerCollection<T>(new T
{
    //properties
});

1 个答案:

答案 0 :(得分:2)

或者...只需使用重载分辨率

public void AddAnswer(OperationAnswer answer)
  => OperationAnswers.Add(answer);

public void AddAnswer(ElectricalAnswer answer)
  => ElectricalAnswers.Add(answer);

或实现一个接口或低音类并将它们存储在同一列表中