这是我的代码伙计们。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
界面中,因此无法看到。

慕侠2389804
TA贡献1719条经验 获得超6个赞
我只是通过使用下面的代码设法解决了这个问题。解决方案虽然不是很漂亮,但我将把这个留在这里。
foreach (var rule in rules)
{
Type typeParameterType = rule.GetType();
var instance = (dynamic)Activator.CreateInstance(typeParameterType);
var myList = instance.Extract();
}
- 2 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消