首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VB.NET中C#的‘default`的等价物是什么?

VB.NET中C#的‘default`的等价物是什么?
EN

Stack Overflow用户
提问于 2011-01-21 01:00:56
回答 1查看 8.9K关注 0票数 18

我通常熟悉C#,并且我正在研究一些VB.NET代码中的性能问题--我希望能够将某些内容与某个类型的缺省值(有点像C#的default关键字)进行比较。

public class GenericThing<T1, T2>
{
    public T1 Foo( T2 id )
    {
        if( id != default(T2) ) // There doesn't appear to be an equivalent in VB.NET for this(?)
        {
            // ...
        }
    }
}

我被引导相信Nothing在语义上是相同的,但是如果我这样做了:

Public Class GenericThing(Of T1, T2)
    Public Function Foo( id As T2 ) As T1
        If id IsNot Nothing Then
            ' ...
        End If
    End Function
End Class

然后,当T2Integer,并且id的值为0时,条件仍然通过,并计算if的主体。但是,如果我这样做了:

    Public Function Bar( id As Integer ) As T1
        If id <> Nothing Then
            ' ...
        End If
    End Function

则不满足条件,且不计算正文...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-21 01:14:36

这不是一个完整的解决方案,因为您的原始C#代码无法编译。您不能通过局部变量使用任何东西:

Public Class GenericThing(Of T)
    Public Sub Foo(id As T)
        Dim defaultValue As T = Nothing
        If id <> defaultValue Then
            Console.WriteLine("Not default")
        Else
            Console.WriteLine("Default")
        End If
    End Function
End Class

这不会编译,就像C#版本不会编译一样--您不能像那样比较无约束类型参数的值。

你可以使用EqualityComparer(Of T) --然后你甚至不需要局部变量:

If Not EqualityComparer(Of T).Default.Equals(id, Nothing) Then
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4750152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档