繁体   English   中英

如何在C#中实现多行字符串; VB的XML Literals的替代品?

[英]How to achieve multi-line strings in C#; an alternative to VB's XML Literals?

我在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#任何建议?

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

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#中逐字字符串的行为。 这些文字以字符串前面的leadin @开头,让编译器不处理字符转义。 你需要的唯一角色逃脱是逃避"""相反。

所以你的查询看起来像

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中,空白只是为了可读性,但是要记住白色空间是用这些文字完全保留的。

首先 - 使用多行字符串文字

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)这样的谜题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!"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM