相关疑难解决方法(0)

C#中的多行字符串文字

有没有一种简单的方法在C#中创建多行字符串文字?

这就是我现在拥有的:

string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
Run Code Online (Sandbox Code Playgroud)

我知道PHP有

<<<BLOCK

BLOCK;
Run Code Online (Sandbox Code Playgroud)

C#有类似的东西吗?

c# string shorthand

962
推荐指数
12
解决办法
56万
查看次数

C#中的行继续字符

我们有一个包含很长字符串的变量的单元测试.

问题是如何在代码中编写它,没有换行问题或代码难以阅读.

在VB中有一个行继续字符,在C#中是否存在等价物?

c#

59
推荐指数
4
解决办法
9万
查看次数

多行C#插值字符串文字

C#6为内插字符串文字带来了编译器支持,语法如下:

var person = new { Name = "Bob" };

string s = $"Hello, {person.Name}.";
Run Code Online (Sandbox Code Playgroud)

这对于短字符串很有用,但是如果要生成更长的字符串,必须在一行中指定它吗?

使用其他类型的字符串,您可以:

    var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
        height,
        width,
        background);
Run Code Online (Sandbox Code Playgroud)

要么:

var multi2 = string.Format(
    "Height: {1}{0}" +
    "Width: {2}{0}" +
    "Background: {3}",
    Environment.NewLine,
    height,
    width,
    background);
Run Code Online (Sandbox Code Playgroud)

我无法找到一种方法来实现这一点,使用字符串插值,而不是只有一行:

var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
Run Code Online (Sandbox Code Playgroud)

我意识到在这种情况下你可以用来\r\n代替Environment.NewLine(不太便携),或者把它拉到本地,但是有些情况下你不能将它减少到一行以下而不会失去语义强度.

是不是字符串插值不应该用于长字符串?

我们应该使用StringBuilder更长的字符串吗?

var multi4 = new StringBuilder()
    .AppendFormat("Width: {0}", width).AppendLine()
    .AppendFormat("Height: {0}", height).AppendLine()
    .AppendFormat("Background: {0}", background).AppendLine()
    .ToString();
Run Code Online (Sandbox Code Playgroud)

还是有更优雅的东西?

.net c# string multiline string-interpolation

48
推荐指数
4
解决办法
3万
查看次数

用于多行插值的 C# FormattableString 连接

在 C#7 中,我尝试使用多行内插字符串与FormttableString.Invariant一起使用,但字符串连接似乎对 FormttableString 无效。

根据文档: FormattableString 实例可能由 C# 或 Visual Basic 中的内插字符串产生。

以下 FormttableString 多行连接无法编译:

using static System.FormattableString;
string build = Invariant($"{this.x}" 
                       + $"{this.y}"
                       + $"$this.z}");
Run Code Online (Sandbox Code Playgroud)

错误 CS1503 - 参数 1:无法从“字符串”转换为“System.FormattableString”

使用没有连接的内插字符串确实可以编译:

using static System.FormattableString;
string build = Invariant($"{this.x}");
Run Code Online (Sandbox Code Playgroud)

你如何用类型实现多行字符串连接FormattableString

(请注意 FormattableString 是在 .Net Framework 4.6 中添加的。)

c# string-concatenation formattablestring

6
推荐指数
1
解决办法
3480
查看次数

有没有办法使用C#6的字符串插值与多行字符串?

有没有办法使用C#6的字符串插值多行字符串?

就像是

   string a = "1111";
   string s = @$"
         {a}    
    ";
Run Code Online (Sandbox Code Playgroud)

以上不起作用.

string-interpolation c#-6.0

2
推荐指数
1
解决办法
804
查看次数

拆分长插值字符串

一个例子:

var a = $"Some value 1: {b1:0.00}\nSome value 2: {b2}\nSome value 3: {b3:0.00000}\nSome value 4: {b4:0.00}\nSome value 5: {b6:0.0}\nSome value 7: {b7:0.000000000}";
Run Code Online (Sandbox Code Playgroud)

这有点难以阅读.

我能做到

var a = $"Some value 1: {b1:0.00}\n" +
        $"Some value 2: {b2}\n" +
        $"Some value 3: {b3:0.00000}\n" +
        $"Some value 4: {b4:0.00}\n" +
        $"Some value 5: {b6:0.0}\n" +
        $"Some value 7: {b7:0.000000000}";
Run Code Online (Sandbox Code Playgroud)

但是这里有一条评论说什么这将是多次调用string.Format,我认为它会(不知道如何检查它,IL对我来说是一个黑盒子).

问题:可以吗?拆分长插值字符串有哪些其他选项?

c# code-formatting string-interpolation c#-6.0

0
推荐指数
1
解决办法
300
查看次数