ser*_*hio 7 .net vb.net syntax
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
Run Code Online (Sandbox Code Playgroud)
1)第一个问题,我更喜欢能够使用"cucu".MyExtensionMethod()以及test.MyExtensionMethod();
1')语法如
"No Result".Print() ' Print is an extension method '
" No Result ".Trim() ' Trim is a framework method '
Run Code Online (Sandbox Code Playgroud)
不起作用
但是,语法就像
myTextBox.Text = "No Result".Translate() ' Translate is an extension method '
myTextBox.Text = " No Result ".Trim() ' Trim is a framework method '
Run Code Online (Sandbox Code Playgroud)
效果很好.
所以看起来字符串常量行为的一致性缺失.
2)查看评论(见附图).单词"custom","string"和"error"会突出显示,但它们在注释中,因此应该是绿色,而不是蓝色.
为什么这个?有什么办法?
编辑:
在Microsoft Connect中声明为"bug" (即使不仅仅是语法"miss")...
编辑2:
正如Hans Passant所说的那样,标准的字符串方法"cucu".Trim()也不起作用.
我可以确认这确实是一个"bug"(在Visual Studio 2008中测试过).但事实上,它是由VB设计的,不会改变.
但是,我想花时间解释为什么这是一个可怕的问题.对不起Serhio.
Infer在这里使用- 它会减少问题)这是一个完整的示例,使用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
Run Code Online (Sandbox Code Playgroud)
VB中的行为是一致的:您不能将值作为逻辑行中的第一个标记.例如,以下代码也不编译(给定一个表单类的现有的,适当的定义Form1):
New Form1().ShowDialog()
Run Code Online (Sandbox Code Playgroud)
再次修复是通过Call以下方式为表达式添加前缀:
Call New Form1().ShowDialog()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |