VB.NET中的多行字符串
从我有关于vb.net的记忆开始,VB.net程序员们就一直因为代码中的多行字符串问题一次又一次地被击倒。
一开始,大家使用 & 和换行符 _ 来连接字符串,呃,后来程序员们觉得这太荒唐了,于是出现了高级一些的用法,例如StringBuilder(经常被我简写成sb)。即便如此,VB.net的多行字符串还是无法做到像C#一样的简洁与高可读性: string query = @"SELECT first,last FROM table WHERE id = 1"; VB.NET的IDE包括编译器很“自然”地不支持这些特性,原因嘛,简单来说,就是VB.NET没有分号。由大量的连接符和换行符(甚至还有vbCrLf和ControlChars.NewLine)组成的多行字符串使代码非常混乱而且使可读性变得很低,导致很长一段时间VB程序员们非常羡慕C#程序员,呃,至少在这个方面是。 举个栗子?这里有一个: Dim sourceText As String = "Imports Microsoft.VisualBasic" & vbNewLine & "Imports System" & vbNewLine & "Imports System.Collections" & vbNewLine & "Imports Microsoft.Win32" & vbNewLine & "Imports System.Linq" & vbNewLine & "Imports System.Text" & vbNewLine & "Imports Roslyn.Compilers" & vbNewLine & "Imports System.ComponentModel" & vbNewLine & "Imports System.Runtime.CompilerServices" & vbNewLine & "Imports Roslyn.Compilers.VisualBasic" & vbNewLine & vbNewLine & "Namespace HelloWorld" & vbNewLine & " Module Program" & vbNewLine & " Sub Main(args As String())" & vbNewLine & " Console.WriteLine(""Hello,World!"")" & vbNewLine & " End Sub" & vbNewLine & " End Module" & vbNewLine & "End Namespace" 至于你晕不晕,反正我是晕了......
Dim sourceText As String = <string> Imports Microsoft.VisualBasic Imports System Imports System.Collections Imports Microsoft.Win32 Imports System.Linq Imports System.Text Imports Roslyn.Compilers Imports System.ComponentModel Imports System.Runtime.CompilerServices Imports Roslyn.Compilers.VisualBasic Namespace HelloWorld Module Program Sub Main(args As String()) Console.WriteLine("Hello,World!") End Sub End Module End Namespace </string>
对比一下前面的代码,有没有发自内心的想说出“我靠”两个字? Dim sourceText = <string> Imports Microsoft.VisualBasic Imports System Imports System.Collections Imports Microsoft.Win32 Imports System.Linq Imports System.Text Imports Roslyn.Compilers Imports System.ComponentModel Imports System.Runtime.CompilerServices Imports Roslyn.Compilers.VisualBasic Namespace HelloWorld Module Program Sub Main(args As String()) Console.WriteLine("Hello,World!") End Sub End Module End Namespace </string>.Value 比较明显的变化就是没有了As String的显式类型声明,然后后面调用.Value属性以确定这个变量确实是字符串。实际上与上面代码相比,这两段代码在编译、运行时并没有什么区别。也许第二种更漂亮些?
Dim sourceText = <string>Imports Microsoft.VisualBasic Imports System Imports System.Collections Imports Microsoft.Win32 Imports System.Linq Imports System.Text Imports Roslyn.Compilers Imports System.ComponentModel Imports System.Runtime.CompilerServices Imports Roslyn.Compilers.VisualBasic Namespace HelloWorld Module Program Sub Main(args As String()) Console.WriteLine("Hello,World!") End Sub End Module End Namespace</string>.Value (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |