3

我有以下接口和具体类。

我收到以下错误:

“DAL.Model.Audit.Categories”无法实现“DAL.Interfaces.IAudit.Categories”,因为它没有匹配的返回类型“System.Collections.Generic.IEnumerable”。

谁能解释我在这里做错了什么?

public interface IAudit
{
    IEnumerable<ICategory> Categories { get; set; }
    IEnumerable<IAuditAnswer> Answers { get; set; }
}

public class Audit : IAudit
{
    public List<ICategory> Categories { get; set; }
    public List<IAuditAnswer> Answers { get; set; }
}
4

3 回答 3

6

实现接口时必须遵守约定:

public class Audit : IAudit
{
    public IEnumerable<ICategory> Categories { get; set; }
    public IEnumerable<IAuditAnswer> Answers { get; set; }
}

在接口中,这两个属性定义为IEnumerable<T>,因此在您的实现类中,您应该使用相同的类型而不是List<T>.

于 2012-12-08T14:36:51.150 回答
2

你可以阅读这篇非常有用的文章来了解原因:

泛型类型的变异(C# 编程指南)

不幸的是,强类型集合有其自身的缺点。

于 2012-12-08T14:46:48.920 回答
1

这不起作用的原因是因为IList它比IEnumerable.

在您的脑海中,您(我猜想)您认为IList实现IEnumerable了“为什么我不能只使用它?” 真正的答案在于这个 stackoverflow 响应

于 2012-12-08T16:28:59.000 回答