爲什麼字符串插值寧願使用string
而不是IFormattable
方法重載?帶字符串插值的重載字符串方法
想象一下以下內容:
static class Log {
static void Debug(string message);
static void Debug(IFormattable message);
static bool IsDebugEnabled { get; }
}
我有對象非常昂貴ToString()
。此前,我沒有以下內容:
if (Log.IsDebugEnabled) Log.Debug(string.Format("Message {0}", expensiveObject));
現在,我想有IsDebugEnabled邏輯裏面Debug(IFormattable)
,並且在消息對象調用toString()只在必要時。
Log.Debug($"Message {expensiveObject}");
但是,這稱爲Debug(string)
過載。
插值字符串解析字符串' '但隱式類型轉換爲'IFormattable'。所以,如果你'IFormattable msg = $「Message {expensiveObject}」; Log.Debug(msg);'你應該做生意。請參閱https://msdn.microsoft.com/en-gb/library/dn961160.aspx#Anchor_0 – spender
請參閱[TryRoslyn](http://goo.gl/eiRtVr)上的此示例,IFormattable是煙霧和鏡像,帶格式()下面:) – PTwr
你應該真的在這裏使用'ConditionalAttribute'。 – leppie