VB.NET 'Like' 运算符与 Operators.LikeString() 不同

问题描述 投票:0回答:1

在下面的示例中,为什么第一个结果是 (

x
)
True
而第二个结果是 (
y
)
False

Dim x = "[email protected]" Like "*symas-design.ch"
Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("[email protected]", "*symas-design.ch", CompareMethod.Text)

我的目标是在 C# 中复制 VB.Net

LIKE
运算符的行为

vb.net
1个回答
11
投票

Like
运算符显然不使用
Operators.LikeString
,而是使用
LikeOperator.LikeString

我尝试了这个LINQPad程序:

Sub Main
    Dim x = "[email protected]" Like "*symas-design.ch"
    Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("[email protected]", "*symas-design.ch", Microsoft.VisualBasic.CompareMethod.Text)

    x.Dump()
    y.Dump()
End Sub

它显示:

True
False

所以正如你所说,它们不一样。但后来我展示了生成的 IL:

IL_0000:  ldstr       "[email protected]"
IL_0005:  ldstr       "*symas-design.ch"
IL_000A:  ldc.i4.0
IL_000B:  call        Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString
IL_0010:  stloc.0     // x
IL_0011:  ldstr       "[email protected]"
IL_0016:  ldstr       "*symas-design.ch"
IL_001B:  ldc.i4.1
IL_001C:  call        Microsoft.VisualBasic.CompilerServices.Operators.LikeString
IL_0021:  stloc.1     // y
IL_0022:  ldloc.0     // x
IL_0023:  call        LINQPad.Extensions.Dump
IL_0028:  pop
IL_0029:  ldloc.1     // y
IL_002A:  call        LINQPad.Extensions.Dump

他们似乎调用了不同的方法,所以我尝试了这个:

Sub Main
    Dim x = "[email protected]" Like "*symas-design.ch"
    Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("[email protected]", "*symas-design.ch", Microsoft.VisualBasic.CompareMethod.Text)
    Dim z = Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString("[email protected]", "*symas-design.ch", Microsoft.VisualBasic.CompareMethod.Text)

    x.Dump()
    y.Dump()
    z.Dump()
End Sub

我得到了:

True   <-- Like operator
False  <-- Operator.LikeString
True   <-- LikeOperator.LikeString

所以你需要使用

LikeOperator.LikeString
来代替。

这里有一个 C# LINQPad 程序来演示:

void Main()
{
    bool z = LikeOperator.LikeString("[email protected]", "*symas-design.ch", Microsoft.VisualBasic.CompareMethod.Text);
    z.Dump();
}

还输出

True

© www.soinside.com 2019 - 2024. All rights reserved.