이것이 작동하지 않는 이유가 표시되지 않습니다. double
에서 decimal
으로 직접 전송할 수 있지만 예기치 않게 내부에있는 경우이 캐스트를 수행 할 수 없습니다. 제네릭 클래스는,이 조각은 더 잘 설명 :일반 십진수는 double에서 캐스팅 할 수 없습니다.
public class TestCollection<T>
{
public void Add(object value)
{
//When T is decimal, then I get
// System.InvalidCastException
var t = (T) value;
}
}
public void Main()
{
var t = new TestCollection<decimal>();
double doub = 10;
var decim = (decimal) doub; //Works!
t.Add(doub); //throws!
}
System.InvalidCastException 사용자 코드 = 지정한 캐스트가 잘못되었습니다 HRESULT = -2147467262 메시지 처리되지 않은이었다. 출처 = WPF 스택 트레이스 : Wpf.TestCollection`1.Add C에서 (개체 값)에서 : \ 사용자 \ btord \ 소스 \ 레 포스 \ 라이브 차트 \ 예 \ WPF JimmyTheTestsGuy.xaml.cs \ : 라인 15 에서 C : \ Users \ btord \ Source \ Repos \ Live-Charts \ Examples \ Wpf \ JimmyTheTestsGuy.xaml.cs에있는 Wpf.JimmyTheTestsGuy..ctor()는 C : \의 Wpf.MainWindow..ctor()에있는 35 줄입니다. 사용자 \ btord 소스 \ 레 포스 \ 라이브 차트 \ 예 \ WPF \ MainWindow.xaml.cs를 \ 라인 (56) 가의 InnerException : 다음과 같은 이유
이것은 두 번이 아니라 객체를 전달하기 때문에 발생합니다. – steryd
왜'value'의 타입은'T'가 아닌'object'입니까? – Lee
@Lee 오버로드가 두 개 있습니다. 하나는 T이고 하나는 객체입니다. 객체 오버로드가 호출되면 오류가 발생합니다. 코드의 작은 부분입니다. –