【问题标题】:Using variables inside strings在字符串中使用变量
【发布时间】:2011-08-29 07:42:49
【问题描述】:

在 PHP 中,我可以执行以下操作:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

C# 中有类似的语言结构吗?

我知道有String.Format();,但我想知道它是否可以在不调用字符串上的函数/方法的情况下完成。

【问题讨论】:

    标签: c# string string-formatting


    【解决方案1】:

    在 C# 6 中,您可以使用 string interpolation:

    string name = "John";
    string result = $"Hello {name}";
    

    Visual Studio 中的语法突出显示使其具有高度可读性,并且所有标记都经过检查。

    【讨论】:

    • 很好的解决方案。但是,为什么检查所有令牌才有意义呢?
    【解决方案2】:

    此功能不是 C# 5 或更低版本的内置功能。更新:C# 6 现在支持字符串插值,请参阅更新的答案。

    推荐的方法是使用String.Format

    string name = "Scott";
    string output = String.Format("Hello {0}", name);
    

    但是,我编写了一个名为 SmartFormat 的小型开源库,它扩展了 String.Format,以便它可以使用命名占位符(通过反射)。所以,你可以这样做:

    string name = "Scott";
    string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".
    

    希望你喜欢!

    【讨论】:

    • 使用反射实现与标准 string.Format 相比会有什么样的性能损失?
    • 我看到你在 wiki 上已经有一个performance page。它看起来很有希望。干得好!
    • 是的,我相信性能页面可能解决了您的问题,但我没有对“Hello {0}”与“Hello {name}”进行任何比较。显然,反射需要更长的时间。但是,使用缓存功能可以提高解析性能,并可以最大限度地减少差异。无论哪种方式,事情都很快!
    • 这不再是真的。 C#6 将此作为功能添加
    【解决方案3】:

    使用以下方法

    1:方法一

    var count = 123;
    var message = $"Rows count is: {count}";
    

    2:方法二

    var count = 123;
    var message = "Rows count is:" + count;
    

    3:方法三

    var count = 123;
    var message = string.Format("Rows count is:{0}", count);
    

    4:方法四

    var count = 123;
    var message = @"Rows
                    count
                    is:{0}" + count;
    

    5:方法五

    var count = 123;
    var message = $@"Rows 
                     count 
                     is: {count}";
    

    【讨论】:

    • 最好添加评论说明您选择使用这些方法的原因。
    • 你好吗:var count = 123; var text = "Rows count is: {count}"; var message = $text;?
    【解决方案4】:

    在 C#5 (-VS2013) 之前,您必须为其调用函数/方法。要么是“普通”函数,例如 String.Format,要么是 + 运算符的重载。

    string str = "Hello " + name; // This calls an overload of operator +.
    

    在 C#6 (VS2015) 中引入了字符串插值(如其他答案所述)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2020-11-07
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多