是否可以在不使用连接符的情况下在字符串变量中包含C#变量?

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)

正如您所看到的,能够在不需要连接的情况下指定变量,使事情变得更容易 - 特别是当内容增加时.

Rob*_*evy 12

不,不幸的是C#不是PHP.
但好的一面是,C#不是PHP.


Jes*_*alm 8

几乎用一个小的扩展方法.

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)