如何在c#中实现多行字符串VB's XML literal的替代品

本文关键字:XML 替代品 literal VB 字符串 实现 | 更新日期: 2023-09-27 18:06:41

我在vb.net中有一个项目,使用XML Literals来处理大块的SQL,如下所示:

Dim SQL As String = <a> Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328) </a>.Value

但是在c#中似乎找不到等价的有什么建议吗?

如何在c#中实现多行字符串VB's XML literal的替代品

您可以用@作为字符串常量的前缀,以跨多行。唯一需要转义的是引号(使用双引号)。

string SQL = @"Use test
  alter table BarFoo alter column CouponName nvarchar(328)
  alter table Foo alter column IngredientName nvarchar(328)
  alter table Bar alter column IngredientShortDescription nvarchar(328)
  alter table FooBar alter column ItemName nvarchar(328)";

似乎你在试图模仿c#中逐字字符串的行为。这些字面值在字符串之前以@开头,以使编译器不处理字符转义。唯一需要的字符转义是用""转义"

所以你的查询看起来像

string query = @"
Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)";

这包括换行字符'n以及任何前导空格。在SQL中,空白只是为了可读性,但最好记住,空白完全保留在这些文字中。

First -像

一样使用多行字符串
String sql = @"Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)"
  • 请注意,字符串中的所有换行符和每行开头的空白都被保留


第二,让字符串插值为你工作,如果你需要任何字符串参数化:

String databaseName = "test"
String tableName = "BarFoo"
String sql = @"Use '{databaseName}
alter table '{tablaName} alter column CouponName nvarchar(328)"
  • 没有像String.Format("Use {0}; alter table {1}", databaseName, tableName)这样的谜题


第三Visual Basic也已经有了多行字符串字面值。请不要再使用XML变通方法。
在VB中,使用

Dim sql As String = "Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)"
'and with interpolated strings:
Dim when As String = "since Visual Studio 2015"
Dim note As String = $"String interpolation works {when}, see this VB-specific syntax!"