VB.NET语法和字符串扩展方法
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. >它没有列出重现问题所需的所有步骤. 这是一个完整的示例,使用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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |