VB.NET的空合并运算符是什么?

81

1
可能是 https://dev59.com/nXRB5IYBdhLWcg3wa2q2 中的重复问题。 - Mrchief
1
自从VS 2015以来,现在可以在vb.Net中使用?.。Dim x = Obj?.Child?.AnotherChild?.Something?.AString 如果任何对象为null,则x是一个空字符串,否则如果所有对象都不为null,则设置x的值。 - Edamreed
@Edamreed,您应该在至少一个重复问题或此问题中将其作为答案。 - beppe9000
@Edamreed ?. 是空值条件运算符(也称为安全导航运算符),而不是问题所询问的 ?? 空值合并运算符。 - rob3c
4个回答

124

是的,只要你使用VB 9或更高版本(包含在Visual Studio 2008中),就可以实现。

你可以使用重载了接受两个参数的If运算符的版本。

Dim myVar? As Integer = Nothing
Console.WriteLine(If(myVar, 7))

更多信息可以在VB.NET团队的一篇博客文章这里找到。

(是的,这是一个操作符,即使它看起来像一个函数。它将编译成与C#中“正确”的null-coalescing操作符相同的IL代码。)

示例

Dim b As Boolean?
Console.WriteLine("{0}.", If(b, "this is expected when b is nothing"))
'output: this is expected when b is nothing.

b = False
Console.WriteLine("{0}.", If(b, "this is unexpected when b is false"))
'output: False.

b = True
Console.WriteLine("{0}.", If(b, "this is unexpected when b is true"))
'output: True.

1
需要注意的是,与C#运算符相反,VB.NET实现不允许使用throw表达式,它只接受值表达式。 - Crono
通过 Wayback Machine 链接查看的博客文章:https://web.archive.org/web/20150716145313/http://blogs.msdn.com/b/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx - amonroejj

11

4
如果你发现了一个重复的问题,请将该问题标记为重复的,而不是发布一个回答,其中包含指向重复问题的链接。这有助于减少网站上的杂乱无序。只有在你认为自己可以为问题添加价值时才应该发布回答。谢谢! - Cody Gray
抱歉,我的错。我没意识到,但未来一定会记住的。 - SeeSharp

-3
不要。使用GetValueOrDefault;那就是它存在的原因!

2
GetValueOrDefault(ByVal default As T) 强制求值默认参数,即使其不是必需的,而 null 合并运算符只有在 HasValue 为 false 时才会求值默认参数。 - Lukazoid

-3

6
如果你发现一个重复的问题,请标记该问题为重复而不是发布一个回答链接到重复的问题。这有助于减少网站上的混乱。只有当你认为你可以为问题添加价值时,才发表回答。谢谢! - Cody Gray
@Cody Gray -- 谢谢,下次会注意的。 - davecoulter

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