首页 > 解决方案 > 可以进一步改进此代码以连接地址吗?

问题描述

这段代码可以进一步改进吗?可能是通过保持简单但避免从对象值创建列表

public static string GetAddress(Address address)
{
    if (address is null)
    {
        return string.Empty;
    }

    List<string> addressLines = new List<string> {
        address.Line1,
        address.Line2,
        address.Town,
        address.Country,
        address.Postcode
    };

    IEnumerable<string> addressLinesWithValues = 
        addressLines.Where(l => !string.IsNullOrWhiteSpace(l));

    return string.Join(" ", addressLinesWithValues.ToArray());
}

标签: c#

解决方案


不确定我会称之为改进,但它确实删除了List创建:

public static string GetAddress(Address address)
{
    return address == null
        ? string.Empty
        : $"{(string.IsNullOrWhiteSpace(address.Line1) ? "" : $"{address.Line1} ")}" +
          $"{(string.IsNullOrWhiteSpace(address.Line2) ? "" : $"{address.Line2} ")}" +
          $"{(string.IsNullOrWhiteSpace(address.Town) ? "" : $"{address.Town} ")}" +
          $"{(string.IsNullOrWhiteSpace(address.Country) ? "" : $"{address.Country} ")}" +
          $"{(string.IsNullOrWhiteSpace(address.Postcode) ? "" : address.Postcode)}"
              .TrimEnd();
}

另一个减少行数但保持相同功能/实现的选项是:

public static string GetAddress(Address address)
{
    return string.Join(" ", new List<string>
    {
        address?.Line1,
        address?.Line2,
        address?.Town,
        address?.Country,
        address?.Postcode
    }.Where(l => !string.IsNullOrWhiteSpace(l)));
}

推荐阅读