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

VB.NET语法和字符串扩展方法

发布时间:2020-12-17 00:22:10 所属栏目:大数据 来源:网络整理
导读:VB.NET中的代码 Module UtilsRuntime.CompilerServices.Extension() _Public Sub Print(ByVal message As String) Console.WriteLine(message)End SubEnd ModulePublic Class FooPublic Sub New() Dim test = "cucu" test.Print() ' no problem: custom stri
VB.NET中的代码
Module Utils
<Runtime.CompilerServices.Extension()> _
Public Sub Print(ByVal message As String)
    Console.WriteLine(message)
End Sub
End Module

Public Class Foo
Public Sub New()
    Dim test = "cucu"
    test.Print() ' no problem: custom string extension method '
    "cucu".Print() ' syntax error '
End Sub
End Class

1)第一个问题,我更喜欢能够使用“cucu”.MyExtensionMethod()以及test.MyExtensionMethod();

1′ )
语法如

"No Result".Print() ' Print is an extension method '
  " No Result ".Trim() ' Trim is a framework method '

不起作用

但是,语法就像

myTextBox.Text = "No Result".Translate() ' Translate is an extension method '
  myTextBox.Text = " No Result ".Trim() ' Trim is a framework method '

效果很好.

所以看起来字符串常量行为的一致性缺失.

2)查看评论(见附图).单词“custom”,“string”和“error”会突出显示,但是它们在注释中,所以应该是绿色,而不是蓝色.

为什么这个?有什么办法?

编辑:

在Microsoft Connect中被宣称为“bug”(即使不是语法“小姐”)……

编辑2:

正如Hans Passant所说,标准字符串方法,如“cucu”.Trim()也不起作用.

我可以确认这确实是一个“bug”(在Visual Studio 2008中测试过).但事实上,它是由VB设计的,不会改变.

但是,我想花时间解释为什么这是一个可怕的问题.对不起Serhio.

>它没有列出重现问题所需的所有步骤.
>它不提供完整的代码.
>它不会将问题减少到最小(不要在这里使用推断 – 它会减少问题)
>因此,有一百种不同的原因可以完全解释这种行为,没有错误(例如,请参阅stakx’优秀(现已删除)答案).

这是一个完整的示例,使用VB的默认设置,没有这些问题(创建一个新的空控制台项目解决方案并将此代码粘贴到Module1.vb):

Module Extensions
    <System.Runtime.CompilerServices.Extension()> _
    Public Sub ShowDialog(ByVal message As String)
        Console.WriteLine(message)
    End Sub
End Module

Module Module1
    Sub Main()
        Dim s As String = "Hello"
        s.ShowDialog()
        ' Doesn’t work:
        '"World".ShowDialog()
        ' Works:
        Call "World".ShowDialog()
    End Sub
End Module

VB中的行为是一致的:您不能将值作为逻辑行中的第一个标记.例如,以下代码也不编译(给定表单类Form1的现有的,适当的定义):

New Form1().ShowDialog()

再次修复是通过Call为表达式添加前缀:

Call New Form1().ShowDialog()

(编辑:李大同)

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

    推荐文章
      热点阅读