错误:List <int>没有'System.Collections.Generic.IEnumerable <int> </int> </int>的匹配

时间:2010-09-15 07:35:47

标签: c# interface-implementation

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

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

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

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

2 个答案:

答案 0 :(得分:6)

您可以使用List<int>类型的支持字段,但将其公开为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); }
    }
}

答案 1 :(得分:1)

您还可以通过明确指定接口隐藏IEnumerable<int> f I

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<int> f。但是,当您将课程投放到I时,您可以再次访问IEnumerable<int> f成员。

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