错误:列表没有 'System.Collections.Generic.IEnumerable的匹配

发布于 2024-09-24 03:32:57 字数 407 浏览 11 评论 0原文

如何用列表实现接口成员“f”?

public interface I
{
    IEnumerable<int> f { get; set; }
}

public class C:I
{
    public List<int> f { get; set; }
}

错误 1“ClassLibrary1.C”未实现接口成员“ClassLibrary1.If”。 “ClassLibrary1.Cf”无法实现“ClassLibrary1.If”,因为它没有“System.Collections.Generic.IEnumerable”的匹配返回类型。 c:\users\admin\documents\visual studio 2010\Projects\ClassLibrary1\Class1.cs

How to implement interface members "f" with the list?

public interface I
{
    IEnumerable<int> f { get; set; }
}

public class C:I
{
    public List<int> f { get; set; }
}

Error 1 'ClassLibrary1.C' does not implement interface member 'ClassLibrary1.I.f'. 'ClassLibrary1.C.f' cannot implement 'ClassLibrary1.I.f' because it does not have the matching return type of 'System.Collections.Generic.IEnumerable'. c:\users\admin\documents\visual studio 2010\Projects\ClassLibrary1\Class1.cs

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾其所爱 2024-10-01 03:33:25

您还可以隐藏 IEnumerable; I 的 f 通过显式指定接口来实现。

public class C : I
{
    private List<int> list;

    // Implement the interface explicitly.
    IEnumerable<int> I.f
    {
        get { return list; }
        set { list = new List<int>(value); }
    }

    // This hides the IEnumerable member when using C directly.
    public List<int> f
    {
        get { return list; }
        set { list = value; }
    }
}

当使用 C 类时,只有一个可见的 f 成员:IList; f。但是,当您将类转换为 I 时,您可以访问 IEnumerable; f 再次成为成员。

C c = new C();
List<int> list = c.f;   // No casting, since C.f returns List<int>.

You can also hide IEnumerable<int> f of I by specifying the interface explicitly.

public class C : I
{
    private List<int> list;

    // Implement the interface explicitly.
    IEnumerable<int> I.f
    {
        get { return list; }
        set { list = new List<int>(value); }
    }

    // This hides the IEnumerable member when using C directly.
    public List<int> f
    {
        get { return list; }
        set { list = value; }
    }
}

When using you class C, there is only one f member visible: IList<int> f. But when you cast your class to I you can access the IEnumerable<int> f member again.

C c = new C();
List<int> list = c.f;   // No casting, since C.f returns List<int>.
吾家有女初长成 2024-10-01 03:33:16

您可以使用 List 类型的支持字段,但将其公开为 IEnumerable

public interface I
{
    IEnumerable<int> F { get; set; }
}

public class C:I
{
    private List<int> f;
    public IEnumerable<int> F
    {
        get { return f; }
        set { f = new List<int>(value); }
    }
}

You can use a backing field of type List<int> but expose it as IEnumerable<int>:

public interface I
{
    IEnumerable<int> F { get; set; }
}

public class C:I
{
    private List<int> f;
    public IEnumerable<int> F
    {
        get { return f; }
        set { f = new List<int>(value); }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文