나는 길에 대해 뭔가를 이해하지 못하고 있습니다. 캐스트가 작동합니다. 명시 적 (암시 적으로 실패 함에도 불구하고) 캐스팅이 정의되어 있는데,이 캐스팅은 "정기적으로"사용할 때 작동하지만, .Cast를 사용하려고 할 때는 작동하지 않는 것으로 보입니다. 왜? 여기 내 문제를 보여주는 컴파일 가능한 코드가있다.IEnumerable.Cast가 캐스트 오버로드를 호출하지 않습니다.
public class Class1
{
public string prop1 { get; set; }
public int prop2 { get; set; }
public static explicit operator Class2(Class1 c1)
{
return new Class2() { prop1 = c1.prop1, prop2 = c1.prop2 };
}
}
public class Class2
{
public string prop1 { get; set; }
public int prop2 { get; set; }
}
void Main()
{
Class1[] c1 = new Class1[] { new Class1() {prop1 = "asdf",prop2 = 1}};
//works
Class2 c2 = (Class2)c1[0];
//doesn't work: Compiles, but throws at run-time
//InvalidCastException: Unable to cast object of type 'Class1' to type 'Class2'.
Class2 c3 = c1.Cast<Class2>().First();
}
관련 (중복되지 않은 경우) : http://stackoverflow.com/questions/445471/puzzling-enumerable-cast- invalidcastexception –