我剛剛遇到了我認爲是類型轉換中的一個怪事。我有類似下面的代碼:C#類型轉換奇數 - 接口作爲通用類型
interface IMyClass { }
class MyClass: IMyClass { }
class Main
{
void DoSomething(ICollection<IMyClass> theParameter) { }
HashSet<MyClass> FillMyClassSet()
{
//Do stuff
}
void Main()
{
HashSet<MyClass> classSet = FillMyClassSet();
DoSomething(classSet);
}
}
當它到達的DoSomething(classSet),編譯器抱怨說,它不能施放HashSet的< MyClass的>到ICollection的<IMyClass>。這是爲什麼? HashSet實現ICollection,MyClass實現IMyClass,那麼爲什麼不是有效的?
順便說一句,這不是很難解決,認爲它有點尷尬。
void Main()
{
HashSet<MyClass> classSet = FillMyClassSet();
HashSet<IMyClass> interfaceSet = new HashSet<IMyClass>();
foreach(IMyClass item in classSet)
{
interfaceSet.Add(item);
}
DoSomething(interfaceSet);
}
對我來說,這個作品使得無法投射更加神祕。
@ Mehrdad的答案是爲什麼。但是,而不是'foreach',你能不能把'FillMyClassSet()'的返回類型改爲'HashSet'? –
JMD
2010-01-20 20:49:46