1
我有以下源:InvalidCastException的在通用方法
private T GetValue<T>(object value)
{
return (T)value;
}
private void button1_Click(object sender, EventArgs e)
{
Int64 integer = GetValue<Int64>(0);
}
所以常數0是一個Int32並且必須被轉換爲一個Int64在通用方法GetValue。 但這會導致InvalidCastException。
但是爲什麼?
當我用Int64做參數時,它工作正常。
private T GetValue<T>(object value)
{
return (T)value;
}
private void button1_Click(object sender, EventArgs e)
{
Int64 zero = 0;
Int64 integer = GetValue<Int64>(zero);
}
感謝Jon和Brian。 我的最終(簡化)解決方案就是這樣。
private T GetValue<T>(object value)
{
return (T)Convert.ChangeType(defaultValue, typeof(T));
}
private void button1_Click(object sender, EventArgs e)
{
Int64 integer = GetValue<Int64>(0);
}
請將此標記爲答案;因爲它是。 – Brian 2013-02-15 16:36:43
非常感謝。現在我使用動態而不是對象,它的工作原理。 – Chris 2013-02-15 17:56:13
@Chris:不,不要使用'dynamic'來解決這個問題。在Jon的例子中,你可以使用'long unboxed =(long)(int)boxed; //成功!「Eric Lippert的優秀解釋:http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx – Brian 2013-02-15 19:41:30