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
它不编译的原因是因为它无法工作。考虑
public class MotherClass : Mother
{
// ...
}
public class DaughterClass : Daughter
{
// ...
}
void breakThings()
{
new YouJustLostTheGame<Daughter>().Crowd(new MotherClass());
}
YouJustLostTheGame<Daughter>
源于List<Daughter>
。 List<Daughter>
只能存储Daughter
。您的Crowd
将Mother
作为其参数,因此new MotherClass()
参数是有效的。然后,它会尝试在列表中存储列表无法容纳的项目。
您需要更改方法签名以接受 T 而不是母。 人群(T 项(....