gpt4 book ai didi

c# - 泛型方法中的 InvalidCastException

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:51 25 4
gpt4 key购买 nike

我有以下来源:

    private T GetValue<T>(object value)
{
return (T)value;
}

private void button1_Click(object sender, EventArgs e)
{
Int64 integer = GetValue<Int64>(0);
}

所以常量 0 是 Int32,必须在通用方法 GetValue 中转换为 Int64。但这将导致 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);
}

最佳答案

But why?

因为您要从装箱的 int 拆箱到 long。它的失败方式与没有泛型的失败方式完全相同:

int original = 0;
object boxed = original;
long unboxed = (long) boxed; // Bang!

拆箱转换必须对同一类型(模枚举和有符号/无符号)进行。

关于c# - 泛型方法中的 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com