推測編譯器背後是將nameof轉換成const string

nameof.jpg

 

之前寫的紀錄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);
}

創作者介紹
創作者 GNAySolution 的頭像
Yang

GNAySolution

Yang 發表在 痞客邦 留言(0) 人氣( 10 )