我希望"(int)null"返回0

Sha*_*pta 11 .net c# casting

我怎样才能得到0作为整数值(int)null.

编辑1:我想创建一个函数,它将在各自的数据类型中返回null表示的默认值.

编辑2: 我如何在这种情况下使用默认值.

(INT)值

其中Value可以为null或任何整数值.我不知道运行时的数据类型.但我会保证Value应该只包含null或Integer值.

dtb*_*dtb 37

您可以使用default关键字获取任何数据类型的默认值:

int x = default(int);        //  == 0
string y = default(string);  //  == null
// etc.
Run Code Online (Sandbox Code Playgroud)

这也适用于通用参数:

Bar<T> Foo<T>() {
    return new Bar<T>(default(T));
}
Run Code Online (Sandbox Code Playgroud)

如果你有一个object可能包含的类型的变量null或类型的值int,你可以使用可空类型?? 运算符将其安全地转换为整数:

int a = 42;
object z = a;
int b = (int?)z ?? 0;        //  == 42
int c = (int?)null ?? 0;     //  == 0
Run Code Online (Sandbox Code Playgroud)

  • +1:你也不需要把它变成自己的功能. (3认同)

Pie*_*ant 25

您可以使用Nullable结构

int value = new Nullable<int>().GetValueOrDefault();
Run Code Online (Sandbox Code Playgroud)

您也可以使用default关键字

int value = default(int);
Run Code Online (Sandbox Code Playgroud)

第二次编辑后:

您需要一个接收任何类型参数的函数,因此将使用对象.你的功能类似于a上的Field<T>扩展方法DataRow

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)

使用该函数,如果你想要一个int(并且你希望值是一个int),你可以这样称它:

int result = GetValue<int>(dataRow["Somefield"]);
Run Code Online (Sandbox Code Playgroud)

  • @ShantanuGupta像`int?`这样的可空类型提供了一个名为GetValueOrDefault()的方法.如果值不为null,则此方法返回值;如果值为null,则返回类型的默认值(对于int,为0). (4认同)