C# 泛型接口规范化

C# 泛型接口规范化,c#,generics,interface,C#,Generics,Interface,我试图为我的通用接口提供一个基础 声明: public interface IMyInterface { ObservableCollection<object> Items {get;} } public interface IMyInterface<TValue> { new ObservableCollection<TValue> Items {get;} //Try to override base Items } void fo

我试图为我的通用接口提供一个基础

声明

public interface IMyInterface
{
    ObservableCollection<object> Items {get;}
}

public interface IMyInterface<TValue>
{
     new ObservableCollection<TValue> Items {get;} //Try to override base Items
}
void foo(object sender, NotifyCollectionChangedEventArgs e)
{
    foreach(IMyInterface obj in e.NewItems) // e.NewItems are derived from MyBase
    {
        var item = obj.Items; // Problem: item = null
        //Do something
    }
}
但是如果我试着这样使用它,我得到了空值


我犯了什么错?还有其他更好的方法吗?

这里的问题在于您的实现。强制转换将导致
null
。您只能使用协变接口,因此第一个
项应为
IEnumerable

公共接口IMyInterface
{
IEnumerable项{get;}
}
公共接口IMyInterface:IMyInterface
{
新的ObservableCollection项{get;}//尝试重写基项
}
公共抽象类MyBase:imy接口,其中T:class
{
私人可观测收集项目;
公共可观测收集项目
{
得到
{
退货(物品);;
}
}
IEnumerable IMyInterface.Items
{
得到
{
退货(物品);;
}
}
}

您在哪里实现了该接口?从您发布的代码中看不出。。。发布一些更相关的代码更新实现
void foo(object sender, NotifyCollectionChangedEventArgs e)
{
    foreach(IMyInterface obj in e.NewItems) // e.NewItems are derived from MyBase
    {
        var item = obj.Items; // Problem: item = null
        //Do something
    }
}
public interface IMyInterface
{
    IEnumerable<object> Items { get; }
}

public interface IMyInterface<TValue> : IMyInterface
{
    new ObservableCollection<TValue> Items { get; } //Try to override base Items
}

public abstract class MyBase<T> : IMyInterface<T> where T : class
{
    private ObservableCollection<T> _Items;
    public ObservableCollection<T> Items
    {
        get
        {
            return _Items;
        }
    }

    IEnumerable<object> IMyInterface.Items
    {
        get
        {
            return _Items;
        }
    }
}