推測編譯器背後是將nameof轉換成const string
之前寫的紀錄log的方法(程式簡易效能紀錄)改用nameof優化,減少魔術字串
//修改前
void LogTrace(string msg, in string uniqueName, in TimeSpan? elapsed = null, [CallerLineNumber] in int lineNumber = 0, [CallerMemberName] in string memberName = "")
{
if (elapsed.HasValue)
{
msg = string.Format("ts={0}{1}{2}", elapsed.Value.ToString("ss'.'ffffff"), string.IsNullOrWhiteSpace(msg) ? string.Empty : "|", msg);
}
AppendLog(LogLevel.Trace, msg, lineNumber, $"{uniqueName}.{memberName}");
}
void LogException(in Exception ex, in string stackTrace, in TimeSpan? elapsed = null, [CallerLineNumber] in int lineNumber = 0, [CallerMemberName] in string memberName = "")
{
string msg = string.Join("|", ex.Message, ex.GetType().Name, $"{Environment.NewLine}{stackTrace}");
if (elapsed.HasValue)
{
msg = string.Format("ts={0}|{1}", elapsed.Value.ToString("ss'.'ffffff"), msg);
}
AppendLog(LogLevel.Error, msg, lineNumber, memberName);
}
//修改後
void LogTrace(string msg, in string uniqueName, in TimeSpan? elapsed = null, [CallerLineNumber] in int lineNumber = 0, [CallerMemberName] in string memberName = "")
{
if (elapsed.HasValue)
{
const string format = nameof(elapsed) + "={0}{1}{2}";
msg = string.Format(format, elapsed.Value.ToString("ss'.'ffffff"), string.IsNullOrWhiteSpace(msg) ? string.Empty : "|", msg);
}
AppendLog(LogLevel.Trace, msg, lineNumber, $"{uniqueName}.{memberName}");
}
void LogException(in Exception ex, in string stackTrace, in TimeSpan? elapsed = null, [CallerLineNumber] in int lineNumber = 0, [CallerMemberName] in string memberName = "")
{
string msg = string.Join("|", ex.Message, ex.GetType().Name, $"{Environment.NewLine}{stackTrace}");
if (elapsed.HasValue)
{
const string format = nameof(elapsed) + "={0}|{1}";
msg = string.Format(format, elapsed.Value.ToString("ss'.'ffffff"), msg);
}
AppendLog(LogLevel.Error, msg, lineNumber, memberName);
}