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

Max*_*tiy 5 c# null

我在这里找到了方法:

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

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

Phi*_*rdt 11

你不需要重写它.你只需要将其称为:

GetValue<int?>(value);
Run Code Online (Sandbox Code Playgroud)


Jak*_*cki 5

int值类型而不是引用类型 - 它不能具有值null.

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


Kon*_*lph 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;
}
Run Code Online (Sandbox Code Playgroud)

或者,terser:

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

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