gpt4 book ai didi

c# - 从 'System.Int32' 到 'System.Nullable` 1[[System.Int32, mscorlib]] 的转换无效

转载 作者:IT王子 更新时间:2023-10-29 03:40:46 25 4
gpt4 key购买 nike

Type t = typeof(int?); //will get this dynamically
object val = 5; //will get this dynamically
object nVal = Convert.ChangeType(val, t);//getting exception here

我在上面的代码中得到了 InvalidCastException。对于上面我可以简单地写 int? nVal = val,但上面的代码是动态执行的。

我得到一个值(不可为 null 的类型,如 int、float 等)包裹在一个对象(这里是 val)中,我必须通过将它转换为另一种类型(可以或不能)来将它保存到另一个对象是它的可空版本)。当

Invalid cast from 'System.Int32' to 'System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.

int,应该可以转换/类型转换为nullable int,这里有什么问题?

最佳答案

您必须使用 Nullable.GetUnderlyingType 来获取 Nullable 的基础类型。

这是我用来克服 NullableChangeType 限制的方法

public static T ChangeType<T>(object value) 
{
var t = typeof(T);

if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return default(T);
}

t = Nullable.GetUnderlyingType(t);
}

return (T)Convert.ChangeType(value, t);
}

非泛型方法:

public static object ChangeType(object value, Type conversion) 
{
var t = conversion;

if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
if (value == null)
{
return null;
}

t = Nullable.GetUnderlyingType(t);
}

return Convert.ChangeType(value, t);
}

关于c# - 从 'System.Int32' 到 'System.Nullable` 1[[System.Int32, mscorlib]] 的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18015425/

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