如何制作具有类型的通用接口列表

这是我的代码伙计们。


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; }

}

现在我想要的是创建一个IScorecardRule接口列表并迭代实现它的每个规则。我计划根据要求在此处添加更多规则,每个规则都具有返回的 'Extract' 方法的差异实现List<T>。这里的问题是ExtractMethod 不可访问。


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--//

}

我希望这是有道理的。让我知道我的逻辑是否有缺陷以及这种方法是否可行。谢谢!


慕盖茨4494581
浏览 103回答 2
2回答

翻翻过去那场雪

问题出在第一行:var&nbsp;rules&nbsp;=&nbsp;new&nbsp;List<IScorecardRule>();您将列表声明为IScorecardRule而不是IScorecardRule<AdminRepository>由于提取方法不在IScorecardRule界面中,因此无法看到。

慕侠2389804

我只是通过使用下面的代码设法解决了这个问题。解决方案虽然不是很漂亮,但我将把这个留在这里。foreach (var rule in rules){&nbsp; &nbsp; Type typeParameterType = rule.GetType();&nbsp; &nbsp; var instance = (dynamic)Activator.CreateInstance(typeParameterType);&nbsp; &nbsp; var myList = instance.Extract();}
打开App,查看更多内容
随时随地看视频慕课网APP