gpt4 book ai didi

c# - 是否有一个 *总是* 产生 null 的 VB.NET 表达式?

转载 作者:可可西里 更新时间:2023-11-01 08:20:01 29 4
gpt4 key购买 nike

我们都知道VB的Nothing与C#的null类似,但不等同。 (如果您不知道,请先查看 this answer。)

出于好奇,我想知道以下内容:

是否存在始终产生 null 的 VB.NET 表达式?


举个具体的例子,拿下面的语句:

Dim o As Object = If(myBool, 5, ...)

是否可以将 ... 替换为某些东西,例如 o5myBool 是true 和 Nothing/nullmyBool 为 false 时?

明显行不通的解决方案:

  • Nothing(参见上面链接答案的问题),
  • DirectCast(Nothing, Object)(使用 Option Strict On 时抛出编译时错误),
  • DirectCast(Nothing, Integer?) 适用于此示例,但一般情况下 不起作用(如果将 5 替换为 5.0 在这个例子中,你需要修改转换)。

明显的解决方法(不算作答案):

  • 声明一个 Object 变量或字段,将其设置为 Nothing 并将其用于 ...,
  • 定义一个总是返回Nothing的方法或属性,
  • DirectCast 将第二个参数 (5) 传递给 Object

注意:上面的例子只是一个例子。问题本身以粗体书写。

最佳答案

我给出的第一个答案遗漏了一些要点,但应该这样做:

Dim o As Object = If(myBool, 5, DirectCast(Nullable.GetUnderlyingType(GetType(Integer)), Object))

这使用了 Nullable.GetUnderlyingType 的事实如果您向它传递一个不是可为空值类型的类型,则将返回空引用 - Integer 不是。存在其他替代方案,例如 Type.GetElementType(),或者可能是 GetType(Object).BaseType

我已经检查过这对于第二个操作数是否适用于多种不同类型。

有点烦人的是你必须转换为 Object...我仍在研究替代方案...

关于c# - 是否有一个 *总是* 产生 null 的 VB.NET 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147728/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com