VB.NET 空合并运算符? [复制]

Posted

技术标签:

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

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

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

【问题讨论】:

***.com/questions/629036/…的可能重复 自 VS 2015 以来,现在可以使用 ?。在 vb.Net 中。 Dim x = Obj?.Child?.AnotherChild?.Something?.AString x 是一个字符串,如果任何对象都不是,则为 Nothing,如果所有对象都不是,则设置。 @Edamreed 你应该至少回答其中一个重复项或这个问题。 @Edamreed ?. 是空条件运算符(又名安全导航运算符),而不是问题询问的 ?? 空合并运算符。 【参考方案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 时评估默认值。

以上是关于VB.NET 空合并运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C# 的 VB.NET 等价物?操作员? [复制]

SQL Server查询参数用于将数据表复制到另一个表单ListView VB.net

C#语法糖空合并运算符??和空合并赋值运算符 ??=

F#中的空合并运算符?

vb.net 有没有++(增1)和--(减1)运算符?

可能重载空合并运算符?