【发布时间】:2018-12-18 12:46:02
【问题描述】:
这是我的代码。
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 接口列表并迭代实现它的每个规则。我计划根据要求在此处添加更多规则,每个规则都具有返回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--//
}
我希望这是有道理的。让我知道我的逻辑是否有缺陷以及这种方法是否可行。谢谢!
【问题讨论】:
-
你能解释一下你想得到什么吗?这段代码对我来说很奇怪。
-
你有一个
List<IScorecardRule>,一个实现了一个没有任何方法的接口的对象列表。因此,除了在System.Object上定义的方法外,您不能对从所述列表中获得的项目调用任何方法。要么创建List<IScorecardRule<AdminRepository>>,要么更好地解释您要解决的问题。 -
您可以尝试用这个替换您调用 Extract 方法的行吗?
((IScorecardRule)rule).Extract(); -
Extract未在IScorecardRule中定义,这是您为List定义的类型...请记住,IScorecardRule与IScorecardRule<T>不同。
标签: c# generics interface return-type