Jed*_*Jed 10 c# string string-interpolation .net-3.5
.NET 3.5 C#是否允许我们在字符串变量中包含变量,而不必使用+ concatenator(或string.Format()).
例如(在伪,我使用$符号来指定变量):
DateTime d = DateTime.Now;
string s = "The date is $d";
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)
输出:
日期是4/12/2011 11:56:39 AM
编辑
由于提示string.Format()的一些响应,我只能假设当我提到" ...(或string.Format(),就此而言)时,我的原始帖子不清楚".要清楚,我很清楚string.Format()方法.但是,在我正在处理的特定项目中,string.Format()对我没有帮助(实际上比+连接器更差).
另外,我推断大多数/你们都想知道我的问题背后的动机是什么(我想如果我按原样阅读我的问题,我会有同样的感受).
如果你是一个好奇的人,这就是它的缺点:
我正在创建一个在Windows CE设备上运行的Web应用程序.由于Web服务器的工作原理,我在字符串变量中创建了整个网页内容(css,js,html等).例如,我的.cs托管代码可能有这样的东西:
string GetPageData()
{
string title = "Hello";
DateTime date = DateTime.Now;
string html = @"
<!DOCTYPE html PUBLIC ...>
<html>
<head>
<title>$title</title>
</head>
<body>
<div>Hello StackO</div>
<div>The date is $date</div>
</body>
</html>
";
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,能够在不需要连接的情况下指定变量,使事情变得更容易 - 特别是当内容增加时.
几乎用一个小的扩展方法.
static class StringExtensions
{
public static string PHPIt<T>(this string s, T values, string prefix = "$")
{
var sb = new StringBuilder(s);
foreach(var p in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
sb = sb.Replace(prefix + p.Name, p.GetValue(values, null).ToString());
}
return sb.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以写:
string foo = "Bar";
int cool = 2;
var result = "This is a string $foo with $cool variables"
.PHPIt(new {
foo,
cool
});
//result == "This is a string Bar with 2 variables"
Run Code Online (Sandbox Code Playgroud)