我们都知道VB的Nothing
与C#的null
类似,但并不相同。 (如果你不知道的是,看看this answer第一。)是否有一个VB.NET表达式* always *会产生null?
只是出于好奇,我想知道以下几点:
是否有一个VB.NET表达式总是产生null
?
举一个具体的例子,采取以下语句:
Dim o As Object = If(myBool, 5, ...)
是否有可能有东西来取代...
,这样o
是5
当myBool
是真实的,Nothing/null
当myBool
是假的?
明显的解决方案,这是行不通的:
Nothing
问题(见上面的链接的答案),DirectCast(Nothing, Object)
(投用选项严格在编译时错误),DirectCast(Nothing, Integer?)
适用于本示例,但不起作用一般(如果在此示例中将5
替换为5.0
,则需要修改转换)。
明显的解决方法(将不能算作答复):
- 声明一个
Object
变量或字段,其设置为Nothing
并使用该对...
, - 定义总是方法或属性返回
Nothing
, DirectCast
第二个参数(5
)到Object
。
注意:上面的示例只是一个示例。问题本身以粗体书写。
你想要一个适用于参考和值类型的单线程吗?如果值类型不可为空会怎么样?你能显示这个代码的_usage_吗? – CodeCaster
你的问题不是很清楚,你为什么总是需要'null'?使用可空类型而不是对象有什么问题?如果你的例子是\t可互换提供了一个更好的例子,'Int32?'不是一个选项。 –
@TimSchmelter:我认为编写一个自动化的C# - > VB.NET转换器可能会有用,但主要我只是好奇。我不明白这个问题如何不清楚:“VB.NET表达式”是明确定义的,表达式的期望返回值在问题中清楚地陈述。 – Heinzi