假设我有一个名为ITranslation
的接口和两个实现该接口的类,分别为NameTranslation
和DescriptionTranslation
:
interface ITranslation {
string text { get; set; }
}
class NameTranslation: ITranslation {
public string text { get; set; }
}
class DescriptionTranslation: ITranslation {
public string text { get; set; }
}
然后,我希望能够使用它们两者来调用方法。
public void DoStuff(ITranslation) { ... };
上面的方法很好!
假设我重新实现了我的DoStuff
方法,以获取接口的通用集合:
public void TryIt()
{
ICollection<ITranslation> myList = new List<ITranslation>();
DoStuff(myList);
}
public void DoStuff(ICollection<ITranslation> Param) { }
也很好!
但是当我切换到
ICollection<NameTranslation> myList = new List<NameTranslation>();
C#说它无法投射。
这是为什么?我该如何实现?
我想从ICollection<NameTranslation>
转到ICollection<ITranslation>
答案 0 :(得分:3)
我相信,如果您将DoStuff方法更改为:
public void DoStuff<T>(ICollection<T> Param) where T : ITranslation { }
将解决您的问题
答案 1 :(得分:0)
您应该像这样对ITranslation进行操作:
ICollection<ITranslation> myList = new List<NameTranslation>();
如果由于某些原因您需要具体名称翻译,而不能使用Icast使用强制转换方法
myList.Cast<ITranslation>.ToList()
或者只是使用泛型进行操作
public void DoStuff<T>(ICollection<T> Param)
where T : ITranslation