2010-01-19 147 views
9

我怎样才能得到0作为整数值从(int)null我想“(int)null”返回我0

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

编辑2: 我怎么能在这种情况下工作使用默认

(int)的值

哪里值可以为空或任意整数值。运行时我不知道数据类型的值。 但我会保证值应该只包含空值或整数值。

回答

21

您可以使用可空结构

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

您也可以使用default关键字

int value = default(int); 

继2日编辑:

你需要一个接收任何类型的参数的函数,所以会使用对象。你的功能类似于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"]); 
+0

我同意。无需重新发明轮子 - 使用构建语言功能 - 可为空类型。 – 2010-01-19 20:08:38

+0

@ Pierre-Alain Vigeant:需要关于“新Nullable ().GetValueOrDefault();”的更多解释关于它的工作原理和工作原理。我有点困惑使用不知道这种类型的语法代码 – 2010-01-19 20:10:59

+4

@ShantanuGupta像'int?'这样的可空类型提供了一种名为GetValueOrDefault()的方法。如果值不为null,则此方法返回值,如果值不为null,则返回该类型的默认值(对于int为0)。 – 2010-01-19 20:12:55

0

您不能将null转换为int,因为int是值类型。你可以把它投到int?虽然。

你想实现什么?

+0

@thecoop:我想做一个通用函数来为我返回所有数据类型的默认值。 – 2010-01-19 20:00:00

34

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

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

这适用于通用参数,以及:

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

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

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

+1:而且你也不需要使它成为自己的功能。 – 2010-01-19 20:05:10

+1

+1为??运营商。 – 2010-01-19 20:28:55

+0

+1,不知道默认关键字。 – iandisme 2010-01-19 21:20:22

1

返回对象的强制转换实例或默认值的一般方法可以实现如下:

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 

注意,因为该方法需要对象作为参数,这会在与struct对象(如int)一起使用时导致装箱。

0

泛型类的方法不返回任何工作:

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



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

你需要的Nullable(Of Integer)返回类型。