在字符串中使用变量


89

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

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

C#中是否有类似的语言构造?

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

Answers:


223

在C#6中,您可以使用字符串插值

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

在Visual Studio中,此语法的突出显示使其具有较高的可读性,并检查了所有标记。


87

此功能不是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".

希望你喜欢!


2
使用反射实现与标准string.Format有什么样的性能损失?
styfle

我看到您在Wiki上已经有一个性能页面。看起来很有希望。干得好!
styfle

是的,我相信效果页可能会解决您的问题,但是我尚未在“ Hello {0}”与“ Hello {name}”之间进行任何比较。显然,反射将需要更长的时间。但是,使用缓存功能可以提高解析性能,并且可以使差异最小化。无论哪种方式,事情都是快速的!
Scott Rippey 2013年

1
这不再是事实。C#6将此功能添加为功能
Cole Johnson

5

在C#5(-VS2013)以下,您必须为其调用函数/方法。“正常”函数(例如String.Format+运算符)或过载。

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

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


5

使用以下方法

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}";

1
最好添加一条注释,说明您为什么选择使用每种方法。
ZombieCode
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.