如何重写default(int?)以获取NULL而不是0

时间:2011-06-07 12:07:04

标签: c# null

我找到了here方法:

public static T GetValue<T>(object value)
{
    if (value == null || value == DBNull.Value)
        return default(T);
    else
        return (T)value;
}

如果“value”为NULL,如何重写它以获取null?

5 个答案:

答案 0 :(得分:11)

您无需重写它。你只需将其称为:

GetValue<int?>(value);

答案 1 :(得分:5)

int值类型而不是引用类型 - 它的值不能为null

如果数据库中的INT列可以为空,请考虑使用int?

答案 2 :(得分:5)

  

如果“value”为NULL,如何重写它以获取null?

你不能 - int不能null。但是,您可以使用Nullable<int>代替。但这只适用于价值类型。例如,将不再T == string工作。为了实现这一目标,您需要编写两个不同的函数,一个用于可空值类型,另一个用于引用类型。

public T? GetValue<T>(object value) where T : struct
{
    if (value == null || value == DBNull.Value)
        return null;
    else
        return (T?)value;
}

或者,terser:

public T? GetValue<T>(object value) where T : struct
{
    return (value == null value == DBNull.Value) ? null : (T?)value;
}

(在所有情况下,T?都是Nullable<T>的快捷方式。)

答案 3 :(得分:0)

在C#中,int是一个值类型,因此不能为null,因为Jakub说。但是,您可以定义变量:

int? thisValue;

这可以设置为null。

答案 4 :(得分:0)

你的意思是:

public T GetValue<T>(object value){
    if (value == null)
        return null;
    else if (value == DBNull.Value)
        return default(T);
    else
        return (T)value;
}