Как составить список универсальных интерфейсов с типами - PullRequest
0 голосов
/ 18 декабря 2018

Вот мой код, ребята.

public interface IScorecardRule { }
public interface IScorecardRule<T> : IScorecardRule 
{
    List<T> Extract();
}

public class AdminRule : IScorecardRule<AdminRepository>
{
    public List<AdminRepository> Extract()
    {
        return new List<AdminRepository>();
    }
}

public class AdminRepository
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

Теперь я хочу создать интерфейс List из IScorecardRule и повторить каждое правило, которое его реализует.Я планирую добавить здесь больше правил в соответствии с требованием, каждое из которых имеет реализацию diff метода «Extract», которая возвращает List<T>.Проблема в том, что Extract метод недоступен.

var rules = new List<IScorecardRule>();
rules.Add(new AdminRule()); //Rule for Admin
//rules.Add(new DeveloperRule()); //Rule for Developer

foreach (var rule in rules)
{
     var myList = rule.Extract(); //Extract Method Not Accessible
     //--More Code here--//
}

Надеюсь, это имеет смысл.Дайте мне знать, если моя логика ошибочна и возможен ли этот подход или нет.Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Мне удалось решить эту проблему с помощью приведенного ниже кода.Решение не очень хорошее, но я оставлю это здесь.

foreach (var rule in rules)
{
    Type typeParameterType = rule.GetType();
    var instance = (dynamic)Activator.CreateInstance(typeParameterType);
    var myList = instance.Extract();
}
0 голосов
/ 18 декабря 2018

Проблема в первой строке:

var rules = new List<IScorecardRule>();

Вы объявляете список как IScorecardRule вместо IScorecardRule<AdminRepository>

, поскольку метод извлечения отсутствует вIScorecardRule интерфейса его не видно.

...