簡體   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