这个用于连接地址的代码可以进一步改进吗?



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

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());
}

不确定我会称之为改进,但它确实删除了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)));
}

我可能会这样做。这将导致更少的分配,在我看来更容易理解。

string result = string.Format("{0} {1} {2} {3} {4}",
address.Line1,
address.Line2,
address.Town,
address.Country,
address.Postcode);
return result.Replace("  "," ");

根据您必须处理的数据,您可能需要考虑三倍空间的可能性,而不仅仅是双倍空间。四倍似乎不太可能。

另请注意,此代码将删除字段中的双空格(例如,如果地址1000 Broadway Ave则将其更改为1000 Broadway Ave(,但这实际上可能更像是一个功能而不是一个错误。

我想建议覆盖您的"地址"。这样,就不需要专门为您曾经使用过的案例编写的方法(地址 prop 值连接(。

要使地址连接为字符串,只需执行 Address.ToString((;

public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Town { get; set; }
public string Country { get; set; }
public string Postcode { get; set; }
public override string ToString()
{
var joinedAddress = $"{this.Line1} {this.Line2} {this.Town} {this.Country} {this.Postcode}";
return Regex.Replace( joinedAddress, @"s+", " " );
}
}

相关内容

最新更新