【问题标题】:Error due to concrete class and interface not having matching return types for IEnumerable<T> and List<T>由于具体类和接口没有匹配 IEnumerable<T> 和 List<T> 的返回类型而导致的错误
【发布时间】:2025-11-21 05:25:08
【问题描述】:

我有以下接口和具体类。

我收到以下错误:

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

【问题讨论】:

标签: c# list interface ienumerable


【解决方案1】:

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

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

在接口中,两个属性被定义为IEnumerable&lt;T&gt;,所以在你的实现类中你应该使用相同的类型而不是List&lt;T&gt;

【讨论】:

    【解决方案2】:

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

    Variance in Generic Types (C# Programming Guide)

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

    【讨论】:

      【解决方案3】:

      这不起作用的原因是因为IListIEnumerable更专业。

      在你的脑海中,你(我猜想)你认为 IList 实现了 IEnumerable 所以“为什么我不能直接使用它?”而真正的答案在于this * response

      【讨论】:

        最近更新 更多