为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕盖茨4494581 2022-06-18 17:45:42
这是我的代码伙计们。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 Developerforeach (var rule in rules){     var myList = rule.Extract(); //Extract Method Not Accessible     //--More Code here--//}我希望这是有道理的。让我知道我的逻辑是否有缺陷以及这种方法是否可行。谢谢!
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

问题出在第一行:

var rules = new List<IScorecardRule>();

您将列表声明为IScorecardRule而不是IScorecardRule<AdminRepository>

由于提取方法不在IScorecardRule界面中,因此无法看到。


查看完整回答
反对 回复 2022-06-18
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

我只是通过使用下面的代码设法解决了这个问题。解决方案虽然不是很漂亮,但我将把这个留在这里。


foreach (var rule in rules)

{

    Type typeParameterType = rule.GetType();

    var instance = (dynamic)Activator.CreateInstance(typeParameterType);

    var myList = instance.Extract();

}


查看完整回答
反对 回复 2022-06-18
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号