加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – VB Like运算符与Operators.LikeString()不同

发布时间:2020-12-17 00:18:51 所属栏目:大数据 来源:网络整理
导读:为什么在下面的示例中第一个(x)为真,第二个(y)为假? 我想在C#中使用类似VB的运算符. Dim x = "abc@symas-design.ch" Like "*symas-design.ch"Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("abc@symas-design.ch","*symas-design.c
为什么在下面的示例中第一个(x)为真,第二个(y)为假?
我想在C#中使用类似VB的运算符.
Dim x = "abc@symas-design.ch" Like "*symas-design.ch"
Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("abc@symas-design.ch","*symas-design.ch",CompareMethod.Text)
Like运算符显然不使用Operators.LikeString,而是使用LikeOperator.LikeString.

我试过这个LINQPad程序:

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

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

它显示:

True
False

正如你所说,他们不会这样做,但后来我展示了IL生成:

IL_0000:  ldstr       "abc@symas-design.ch"
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       "abc@symas-design.ch"
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 = "abc@symas-design.ch" Like "*symas-design.ch"
    Dim y = Microsoft.VisualBasic.CompilerServices.Operators.LikeString("abc@symas-design.ch",Microsoft.VisualBasic.CompareMethod.Text)
    Dim z = Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString("abc@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("abc@symas-design.ch",Microsoft.VisualBasic.CompareMethod.Text);
    z.Dump();
}

哪个也输出True.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读