C# .net 4.5:从具有 where 约束的 List 继承的泛型类

本文关键字:约束 where List 泛型类 继承 net | 更新日期: 2023-09-27 18:34:57

在一个大项目上,我意识到以下片段:

public interface Mother 
{
    void CoolFeature();
}
public interface Daughter : Mother 
{
}
public class YouJustLostTheGame<T> : List<T> where T : Mother 
{
    public void Crowd(Mother item) 
    {
       this.Add(item); 
    }
    public void useFeature() 
    {
       this.Find(a => { return true; }).CoolFeature(); 
    }
}

无法编译 Crowd(Mother) 函数,并显示消息"无法将'Test.Mother'转换为'T'"。当然,这对我来说似乎非常错误,useFeature()完全没问题。那么我错过了什么?

注意: VS2012, win7 x64, .NET 4.5

C# .net 4.5:从具有 where 约束的 List 继承的泛型类

它不编译的原因是因为它无法工作。考虑

public class MotherClass : Mother
{
    // ...
}
public class DaughterClass : Daughter
{
    // ...
}
void breakThings()
{
    new YouJustLostTheGame<Daughter>().Crowd(new MotherClass());
}

YouJustLostTheGame<Daughter>源于List<Daughter>List<Daughter>只能存储Daughter。您的CrowdMother作为其参数,因此new MotherClass()参数是有效的。然后,它会尝试在列表中存储列表无法容纳的项目。

您需要更改方法签名以接受 T 而不是母。 人群(T 项(....