Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将值从object转换为Nullable<&燃气轮机;_C# - Fatal编程技术网

C# 如何将值从object转换为Nullable<&燃气轮机;

C# 如何将值从object转换为Nullable<&燃气轮机;,c#,C#,我有一个带有一些属性的类,我想将值从字符串转换为这个属性的类型。我在转换为可为null的类型时遇到了问题。这是我转换的方法: public static object ChangeType(object value, Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (value

我有一个带有一些属性的类,我想将值从字符串转换为这个属性的类型。我在转换为可为null的类型时遇到了问题。这是我转换的方法:

public static object ChangeType(object value, Type type)
{
    if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    {
        if (value == null)
        {
            return null;
        }

        var underlyingType = Nullable.GetUnderlyingType(type);
        var val = Convert.ChangeType(value, underlyingType);
        var nullableVal = Convert.ChangeType(val, type); // <-- Exception here
        return nullableVal;
    }

    return Convert.ChangeType(value, type);
}
公共静态对象ChangeType(对象值,类型)
{
if(type.IsGenericType&&type.GetGenericTypeDefinition().Equals(typeof(null)))
{
如果(值==null)
{
返回null;
}
var underyingtype=Nullable.getunderyingtype(类型);
var val=Convert.ChangeType(值,underyingType);
var nullableVal=Convert.ChangeType(val,type);//
使用激活器将允许您创建
int?
类的新实例,并将参数传递给
int
值的构造函数。下面的代码是此类实例的文字演示:

var type = typeof(int?);

var underlyingType = typeof(int);

var val = 123;

var nullableVal = Activator.CreateInstance(type, val);

这是不可能的…值类型的装箱将“擦除”可为null的
部分

int? num = 5;
object obj = num;
Console.WriteLine(obj.GetType()); // System.Int32

请注意,这一特性使
Nullable
“特别”。它们需要CLR的直接支持。
Nullable
不仅仅是一个可以编写的结构

您可以做什么:

public static object ChangeType(object value, Type type)
{
    // returns null for non-nullable types
    Type type2 = Nullable.GetUnderlyingType(type);

    if (type2 != null)
    {
        if (value == null)
        {
            return null;
        }

        type = type2;
    }

    return Convert.ChangeType(value, type);
}

无法将整数值转换为nullable@Banov,我看过那篇文章,但在那里我没有找到解决办法。
int? num = null;
object obj = num;
Console.WriteLine(obj == null); // True
public static object ChangeType(object value, Type type)
{
    // returns null for non-nullable types
    Type type2 = Nullable.GetUnderlyingType(type);

    if (type2 != null)
    {
        if (value == null)
        {
            return null;
        }

        type = type2;
    }

    return Convert.ChangeType(value, type);
}