我希望“(int)null”返回0

时间:2010-01-19 19:57:10

标签: c# .net casting

如何从(int)null获得0作为整数值。

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

编辑2: 如何使用默认情况场景中工作。

(int)的值

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

8 个答案:

答案 0 :(得分:36)

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

int x = default(int);        //  == 0
string y = default(string);  //  == null
// etc.

这也适用于通用参数:

Bar<T> Foo<T>() {
    return new Bar<T>(default(T));
}

如果您的变量类型object可能包含null或值int,则可以使用nullable types?? operator将其安全地转换为整数:

int a = 42;
object z = a;
int b = (int?)z ?? 0;        //  == 42
int c = (int?)null ?? 0;     //  == 0

答案 1 :(得分:25)

您可以使用Nullable结构

int value = new Nullable<int>().GetValueOrDefault();

您还可以使用default关键字

int value = default(int);

第二次编辑后:

您需要一个接收任何类型参数的函数,因此将使用对象。您的功能类似于Field<T>

上的DataRow扩展方法
public static T GetValue<T>(object value)
{
    if (value == null || value == DBNull.Value)
        return default(T);
    else
        return (T)value;
}

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

int result = GetValue<int>(dataRow["Somefield"]);

答案 2 :(得分:2)

返回对象的强制转换实例或默认值的泛型方法可以按如下方式实现:

static T Cast<T>(object value) {
    if (value is T)
        return (T)value;
    else
        return default(T);
}

这样,使用有效值将产生值本身:

int value = Cast<int>(4); //value = 4

并且空值将获得默认值:

int value = Cast<int>(null); //value = 0

请注意,由于该方法将object作为参数,因此在与struct对象(如int)一起使用时会导致装箱。

答案 3 :(得分:0)

您不能将null转换为int,因为int是值类型。您可以将其投射到int?

你想要实现的目标是什么?

答案 4 :(得分:0)

返回任何内容的泛型类的方法有效:

 Class GetNull(Of T)
      Public Shared Function Value() As T
           Return Nothing
      End Function
 End Class



 Debug.Print(GetNull(Of Integer).Value())

答案 5 :(得分:0)

查看这篇文章,了解编写扩展程序的最完整方法。我的方案是从NameValueCollection中提取数据。

http://hunterconcepts.com/blog/Extensions_HttpRequestFormQueryString/

答案 6 :(得分:0)

您需要返回类型Nullable(Of Integer)

答案 7 :(得分:0)

使用 null-coalescing运算符 ??

示例:

int? a = null;
return a ?? 0; //this will return 0

这是C#中的新功能。如果操作数不为null,则返回左侧的操作数;否则,返回0。否则,将返回右侧操作数。