저는 타입 캐스팅이 이상하다고 생각합니다.C# 타입 캐스팅 기이 한 타입 - 일반적인 타입의 인터페이스
이 (classSet)을 해봐요 다네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);
}
}
, 컴파일러는 <IMyClass>을 ICollection이하는 HashSet의 < MyClass에 > 캐스팅 할 수없는 불평 : 나는 다음과 같은 코드가 있습니다. 왜 그런가요? 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 's가 이유에 대한 답을 얻었습니다. 하지만'foreach' 대신'FillMyClassSet()'의 리턴 타입을'HashSet'으로 바꿀 수 있습니까? –
JMD