我是一名C#程序员,但现在需要将一些代码从C#转换为VB.NET。在C#中,我可以简单地使用(int)blah.getValue()
,其中getValue()
返回一个Integer?
。
但在VB.NET中使用DirectCast()
并不起作用,显示Integer?
无法转换为Integer
。
有什么想法吗?
我是一名C#程序员,但现在需要将一些代码从C#转换为VB.NET。在C#中,我可以简单地使用(int)blah.getValue()
,其中getValue()
返回一个Integer?
。
但在VB.NET中使用DirectCast()
并不起作用,显示Integer?
无法转换为Integer
。
有什么想法吗?
使用 value 属性获取实际的整数值。
Dim intNullable As Integer?
If intNullable.HasValue Then
Return intNullable.Value
End If
整数类型“Integer?”是可空类型,因此您可能需要将其转换为可空整数。
根据您的情况,您希望使用CType函数,例如“Integer”或“Integer?”。
Val = CType(Source,Integer?)
blah.getValue()
为空,则 (int) blah.getValue()
会抛出异常。 如果 blah.getValue()
为空,则 CType(blah.getValue(), Integer)
返回零。 - MarkJmyNonNullableVar = if(myNullableVar, 0)
如果整数?为空,则设置为0,否则返回实际值。
在C#中,它将是:
myNonNullableVar = myNullableVar ?? 0;
CInt(需要转换为整数的值)
如果使用CType或CInt或其他转换函数将可空整数转换为常规整数,则空值将被转换为零。
像@Rhapsody的答案一样检查可空类型是否有值。
您还可以使用可空类型方法.GetValueOrDefault()
和.GetValueOrDefault(x)
。没有任何参数的重载返回数据类型的默认值,如果该值为空,则返回默认值。例如,整数默认值为零;布尔默认值为False。带有一个参数的重载允许您指定在值为空时要使用的默认值。
dim a as integer? = 1
dim b as integer = a.value
记得检查 a.hasValue(返回布尔值,如果 a 有值则为 true)。
@SLC:将 C# 的 Nullable Int32? 值转换为整数非常简单。
示例:
ID(Nullable<Int32?>)
其中ID是一个NullableObject。
它将在VB.NET中返回一个整数。
Nullable<Int32?>
没有意义。也许你的意思是 Nullable<Int32>
(没有问号)? - Chris Dunaway
getValue()
返回的是Integer?
,那么.Value
属性的类型就是整型。只需使用blah.getValue().Value
即可。或者也可以使用blah.getValue().GetValueOrDefault(<默认值>)
。 - Chris Dunaway