C#中default(T)的VB等效语句是什么?

67
2个回答

59

这可能是以下任何一种情况:

Dim variable As T
Dim variable As T = Nothing
Dim variable As New T()
Dim variable As T = CType(Nothing, T) 'this is suggested by reflector

在VB.NET中,即使是值类型,将Nothing赋值给它也完全没问题。而且只有在为泛型类型指定NewStructure约束时才能实现后者。


15
Reflector建议使用以下(但等效的)代码行: Dim variable As T = CType(Nothing, T) - Matthew Steeples
2
如果有人想要确认这里的版本,我在 GitHub 上组合了一些代码来确认结果对于正确的版本是相同的。这是一个简化的控制台应用程序,其中包含一堆 Debug.Assert 调用。只需下载并按 F5 运行即可。 - patridge

52

default(T)的最接近等效物实际上是CType(Nothing, T),因为它可以在任何default(T)被使用的上下文中使用(即作为表达式)。


无法处理 If Not id = CType(Nothing, TId) Then... 这种情况。 - Rowland Shaw
5
那是价值相等。我相信你想要If Not id Is Nothing Then ...。在这个上下文中,你不需要强制转换空值。 - panopticoncentral
2
MyStructInstance.Equals(ctype(nothing,TypeOfMyStruct))可以工作。'='不行。 - FastAl

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