如何在VB.NET中将整数转换为整数?

9

我是一名C#程序员,但现在需要将一些代码从C#转换为VB.NET。在C#中,我可以简单地使用(int)blah.getValue(),其中getValue()返回一个Integer?

但在VB.NET中使用DirectCast()并不起作用,显示Integer?无法转换为Integer

有什么想法吗?


1
为什么需要进行类型转换?如果getValue()返回的是Integer?,那么.Value属性的类型就是整型。只需使用blah.getValue().Value即可。或者也可以使用blah.getValue().GetValueOrDefault(<默认值>) - Chris Dunaway
8个回答

11

使用 value 属性获取实际的整数值。

Dim intNullable As Integer?

If intNullable.HasValue Then
 Return intNullable.Value
End If

+1。为了获得额外的分数,添加一个Else子句,抛出“InvalidOperationException”异常,“可空对象必须具有值。”这就是当C#的(int)转换遇到null值时发生的情况。 - MarkJ
1
当你测试'.HasValue'时,Else子句是多余的。这是正确的答案。 - smirkingman

9

整数类型“Integer?”是可空类型,因此您可能需要将其转换为可空整数。

根据您的情况,您希望使用CType函数,例如“Integer”或“Integer?”。

Val = CType(Source,Integer?)

CType 仅使用 Integer 进行排序。谢谢! - NibblyPig
6
这个答案并不完全正确。对于 null,会有不同的行为。如果 blah.getValue() 为空,则 (int) blah.getValue() 会抛出异常。 如果 blah.getValue() 为空,则 CType(blah.getValue(), Integer) 返回零。 - MarkJ

1
myNonNullableVar = if(myNullableVar, 0)

如果整数?为空,则设置为0,否则返回实际值。

C#中,它将是:

 myNonNullableVar = myNullableVar ?? 0;

1

CInt(需要转换为整数的值)


1

如果使用CType或CInt或其他转换函数将可空整数转换为常规整数,则空值将被转换为零。

像@Rhapsody的答案一样检查可空类型是否有值。

您还可以使用可空类型方法.GetValueOrDefault().GetValueOrDefault(x)。没有任何参数的重载返回数据类型的默认值,如果该值为空,则返回默认值。例如,整数默认值为零;布尔默认值为False。带有一个参数的重载允许您指定在值为空时要使用的默认值。

Nullable.GetValueOrDefault Method


0
你应该像这样使用CType函数:
CType(blah.getValue(), Integer)

0
dim a as integer? = 1
dim b as integer = a.value

记得检查 a.hasValue(返回布尔值,如果 a 有值则为 true)。


-1

@SLC:将 C# 的 Nullable Int32? 值转换为整数非常简单。

示例:

    ID(Nullable<Int32?>)

你需要做的是: ID.value

其中ID是一个NullableObject。

它将在VB.NET中返回一个整数。


提供的语言示例看起来像是C#,而问题的提出者明确要求VB.NET。我不确定这个答案是否为这个问题已有的众多答案提供了任何额外的信息。 - KyleMit
Nullable<Int32?> 没有意义。也许你的意思是 Nullable<Int32>(没有问号)? - Chris Dunaway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接