gpt4 book ai didi

c# - Generic Cast,将 int 转换为 double 是不可能的

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

我有一个存储不同类型变量(字符串、 double 、整数等)的字典,它们存储为对象。

我有一个通用的 Set 方法和一个通用的 get 方法。

private static Dictionary<int, object> dict = new Dictionary<int, object>();

public static void Set<T>(int key, object value)
{
dict.Add(key, (T)value);
}

public static T Get<T>(int key)
{
dict.TryGetValue(key, out object value);
return (T)value;
}

static void Main(string[] args)
{
Set<int>(1, 100);
Get<double>(1);
}

在 Main 中,我试图将变量 100 保存为整数,这有效,它“作为对象”存储在字典中。现在,当尝试获取变量并将其转换为 double 时,会抛出 IllegalCastException,但为什么呢?从 object 到 double 的显式转换以及从 int 到 double 的显式转换是可用的。

最佳答案

您不会object 转换为intdouble。你unbox .拆箱规则很明确 - 你只能取出与你放入的类型完全相同的类型。(在枚举和基础类型周围插入一些警告,这些与手头的问题不完全相关)

For the unboxing of value types to succeed at run time, the item being unboxed must be a reference to an object that was previously created by boxing an instance of that value type. Attempting to unbox null causes a NullReferenceException. Attempting to unbox a reference to an incompatible value type causes an InvalidCastException.

关于c# - Generic Cast,将 int 转换为 double 是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52829095/

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