是否有可能需要插值的字符串格式的變量。字符串插值內部的字符串插值
public class Setting
{
public string Format { get; set; }
}
var setting = new Setting { Format = "The car is {colour}" };
var colour = "black";
var output = $"{setting.Format}";
預計輸出
「的車是黑色的。」
是否有可能需要插值的字符串格式的變量。字符串插值內部的字符串插值
public class Setting
{
public string Format { get; set; }
}
var setting = new Setting { Format = "The car is {colour}" };
var colour = "black";
var output = $"{setting.Format}";
預計輸出
「的車是黑色的。」
你不能那樣做。字符串插值是純粹的編譯時功能。
你可以做輕微的改動就可以了,如下所示:
public class Setting
{
public string Format
{
get
{
return String.Format(this.Format, this.Colour);
}
set
{
Format = value;
}
}
public string Colour { get; set; }
}
var setting = new Setting { Format = "The car is {0}", Colour = "black" };
然後輸出將是「汽車是黑色的。」
我還沒有測試過這段代碼。
不,你不能這樣做,但你可以實現與一個稍微不同的方式是相同的,那我來想:
public class Setting
{
public Func<string, string> Format { get; set; }
}
,那麼你可以通過你的字符串參數Format
:
var setting = new Setting { Format = s => $"The car is {s}" };
var output = setting.Format("black");
編譯器基本上變成了'設置{Format = s => string.Format(「汽車是{0}」,s)};' –
爲什麼不呢?
首先,你不能在使用C#聲明它之前使用局部變量。所以 在使用之前首先聲明colour
。然後「插入」分配給Format
的字符串,就完成了。
var colour = "black";
var setting = new Setting { Format = $"The car is {colour}" };
var output = $"{setting.Format}";
Console.WriteLine(output);
輸出:
的車是黑色的。
我喜歡這個,但是你可以爲未來的讀者詳細說明,因爲你的改變是如此微妙? –
使用'string.Format'。如果你有變量而不是常量。你不能吃你的蛋糕,也不能吃。 –
人們爲此寫了一堆擴展方法。 ['FormatWith'](http://james.newtonking.com/archive/2008/03/29/formatwith-2-0-string-formatting-with-named-variables)或類似的。要警告的是,這些自定義函數中的每一個都有[稍微不同的行爲](https://web.archive.org/web/20131203044747/http://blog.dotnetwiki.org/2009/01/16/NamedFormatsPexTestimonium.aspx) 。另見[命名格式Redux](http://haacked.com/archive/2009/01/14/named-formats-redux.aspx/)。 – Brian