有没有更好的方法来编写这个字符串插值?

Jak*_*net 1 c# string-interpolation

我必须编写一段漂亮的代码,但我对以下语法不满意.

有没有更好的方法来编写这个字符串插值?

var details = $"{((currentProfile.FirstName != newProfile.FirstName) ? $"{Environment.NewLine}First Name : {newProfile.FirstName}" : string.Empty)}" +
    $"{((currentProfile.LastName != newProfile.LastName) ? $"{Environment.NewLine}Last Name : {newProfile.LastName}" : string.Empty)}" +
    $"{((currentProfile.MiddleName != newProfile.MiddleName) ? $"{Environment.NewLine}Middle Name : {newProfile.MiddleName}" : string.Empty)}" +
    $"{((currentProfile.Suffix != newProfile.Suffix) ? $"{Environment.NewLine}Suffix : {newProfile.Suffix}" : string.Empty)}" +
    $"{((currentProfile.AddressLine1 != newProfile.AddressLine1) ? $"{Environment.NewLine}Address Line 1 : {newProfile.AddressLine1}" : string.Empty)}" +
    $"{((currentProfile.AddressLine2 != newProfile.AddressLine2) ? $"{Environment.NewLine}Address Line 2 : {newProfile.AddressLine2}" : string.Empty)}" +
    $"{((currentProfile.City != newProfile.City) ? $"{Environment.NewLine}City : {newProfile.City}" : string.Empty)}"+
    $"{((currentProfile.ProvinceCode != newProfile.ProvinceCode) ? $"{Environment.NewLine}State : {newProfile.ProvinceCode}" : string.Empty)}" +
    $"{((currentProfile.ZipCode != newProfile.ZipCode) ? $"{Environment.NewLine}Zip Code : {newProfile.ZipCode}" : string.Empty)}" + 
    $"{((currentProfile.CountryCode != newProfile.CountryCode) ? $"{Environment.NewLine}Country : {newProfile.CountryCode}" : string.Empty)}" +
    $"{((currentProfile.Phone != newProfile.Phone) ? $"{Environment.NewLine}Phone : {newProfile.Phone}" : string.Empty)}";
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

我个人可能会使用类似的东西:

var sb = new StringBuilder();
AppendIfDifferent(sb, currentProfile.FirstName, newProfile.FirstName, "First Name");
AppendIfDifferent(sb, currentProfile.LastName, newProfile.LastName, "Last Name");
// ...
string s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

有:

static void AppendIfDifferent(StringBuilder sb, string newValue,
        string oldValue, string label)
{
    if(newValue != oldValue)
    {
        sb.AppendLine().Append(label).Append(" : ").Append(newValue);
    }
}
Run Code Online (Sandbox Code Playgroud)