【问题标题】:VB.NET null coalescing operator? [duplicate]VB.NET 空合并运算符? [复制]
【发布时间】:2011-10-11 04:28:46
【问题描述】:

可能的重复:
Coalesce operator and Conditional operator in VB.NET
Is there a VB.NET equivalent for C#'s ?? operator?

是否有等效于 C# 空值合并运算符的内置 VB.NET?

【问题讨论】:

  • 自 VS 2015 以来,现在可以使用 ?。在 vb.Net 中。 Dim x = Obj?.Child?.AnotherChild?.Something?.AString x 是一个字符串,如果任何对象都不是,则为 Nothing,如果所有对象都不是,则设置。
  • @Edamreed 你应该至少回答其中一个重复项或这个问题。
  • @Edamreed ?. 是空条件运算符(又名安全导航运算符),而不是问题询问的 ?? 空合并运算符。

标签: vb.net null-coalescing-operator


【解决方案1】:

是的,只要您使用的是 VB 9 或更高版本(包含在 Visual Studio 2008 中)。

您可以使用重载的If operator 版本只接受两个参数:

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

更多信息可以在 VB.NET 团队的博客文章中找到here。

(是的,这是一个运算符,尽管它看起来像一个函数。它将编译为与 C# 中“正确”的空合并运算符相同的 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.

【讨论】:

  • 应该注意,与 C# 运算符相反,VB.NET 实现不允许 throw 表达式。它只接受值表达式。
【解决方案2】:

我不相信有内置的 VB.Net 等价物,但这里有一个答案:null coalesce operator in VB.Net(8)

【讨论】:

  • 如果您发现重复的问题,请将问题标记为重复,而不是发布链接到重复问题的答案。这有助于减少网站上的混乱。仅当您认为可以为问题增加价值 时才发布答案。谢谢!
  • @Cody Gray -- 谢谢,下次会做。
【解决方案3】:

根据这个question,答案似乎是If()

【讨论】:

  • 如果您发现重复的问题,请将问题标记为重复,而不是发布链接到重复问题的答案。这有助于减少网站上的混乱。仅当您认为可以为问题增加价值时才发布答案。谢谢!
  • 对不起,我的错。没有意识到;不过,将来一定会牢记这一点。
【解决方案4】:

没有。使用GetValueOrDefault;这就是它存在的原因!

【讨论】:

  • GetValueOrDefault(ByVal default As T) 强制评估默认参数,即使它不是必需的,null-coalescing 运算符只会在 HasValue 为 false 时评估默认值。
猜你喜欢
  • 2011-06-03
  • 2010-10-12
  • 2012-09-19
  • 1970-01-01
  • 2013-09-13
  • 2015-03-27
  • 2023-03-23
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多