Добавить запись в ICollection на основе общего аргумента - PullRequest
0 голосов
/ 05 апреля 2019

Есть ли способ доступа к 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 Ответ

2 голосов
/ 05 апреля 2019

Или ... просто используйте разрешение перегрузки

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

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

Или реализовать интерфейс или класс баса и сохранить их в одном списке

...