c# - string內 - string interpolation




C#中的多行字符串 (6)

有沒有一種簡單的方法在C#中創建多行字符串文字?

這是我現在擁有的:

string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";

我知道PHP有

<<<BLOCK

BLOCK;

C#有類似的東西嗎?


作為旁注,使用C#6.0,現在可以將插入字符串與逐字字符串文字組合在一起:

string camlCondition = [email protected]"
<Where>
    <Contains>
        <FieldRef Name='Resource'/>
        <Value Type='Text'>{(string)parameter}</Value>
    </Contains>
</Where>";

你可以使用這兩種方法:

    private static String ReverseString(String str)
    {
        int word_length = 0;
        String result = "";
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == ' ')
            {
                result = " " + result;
                word_length = 0;
            }
            else
            {
                result = result.Insert(word_length, str[i].ToString());
                word_length++;
            }
        }
        return result;
    }
//NASSIM LOUCHANI
    public static string SplitLineToMultiline(string input, int rowLength)
    {
        StringBuilder result = new StringBuilder();
        StringBuilder line = new StringBuilder();

        Stack<string> stack = new Stack<string>(ReverseString(input).Split(' '));

        while (stack.Count > 0)
        {
            var word = stack.Pop();
            if (word.Length > rowLength)
            {
                string head = word.Substring(0, rowLength);
                string tail = word.Substring(rowLength);

                word = head;
                stack.Push(tail);
            }

            if (line.Length + word.Length > rowLength)
            {
                result.AppendLine(line.ToString());
                line.Clear();
            }

            line.Append(word + " ");
        }

        result.Append(line);
        return result.ToString();
    }

在SplitLineToMultiline()中,你需要定義你想要使用的字符串和行的長度,這很簡單。 謝謝 。


另一個需要注意的是在string.Format中使用字符串文字。 在這種情況下,您需要轉義大括號/括號'{'和'}'。

// this would give a format exception
string.Format(@"<script> function test(x) 
      { return x * {0} } </script>", aMagicValue)
// this contrived example would work
string.Format(@"<script> function test(x) 
      {{ return x * {0} }} </script>", aMagicValue)

如果你不想使用空格/換行符,那麼字符串添加似乎可行:

var myString = String.Format(
  "hello " + 
  "world" +
  " i am {0}" +
  " and I like {1}.",
  animalType,
  animalPreferenceType
);
// hello world i am a pony and I like other ponies.

如果你喜歡,你可以在here運行。


我沒有看到這個,所以我會在這裡發布它(如果你有興趣傳遞一個字符串,你也可以這樣做。)這個想法是,你可以在多行上分割字符串並添加自己的內容(也在多行上)以任何你想要的方式。 這裡可以將“tableName”傳遞給字符串。

    private string createTableQuery = "";

    void createTable(string tableName)
    {

         createTableQuery = @"CREATE TABLE IF NOT EXISTS
                ["+ tableName  + @"] (
               [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
               [Key] NVARCHAR(2048)  NULL, 
               [Value] VARCHAR(2048)  NULL
                                )";
    }

我發現使用字符串文字的問題是,它可能會讓你的代碼看起來有點“ 奇怪 ”,因為為了不在字符串本身中獲得空格,它必須完全左對齊:

    var someString = @"The
quick
brown
fox...";

呸。

所以我喜歡使用的解決方案,它使您的代碼與其他代碼保持一致,如下所示:

var someString = String.Join(
    Environment.NewLine,
    "The",
    "quick",
    "brown",
    "fox...");

當然,如果你只是想像你一樣在邏輯上分割SQL語句的行,並且實際上不需要新行,那麼你總是可以用Environment.NewLine替換" "





shorthand