一串使用空值C#进行格式化



我想格式化一个地址。这是我的代码:

address = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}",
                        postalAddress.Line1,
                        postalAddress.Line2,
                        postalAddress.Line3,
                        postalAddress.Line4,
                        postalAddress.Suburb,
                        postalAddress.StateCode,
                        postalAddress.Pcode);

不幸的是,当第2行、第3行和第4行为空时,会生成116 Knox St, , , , Watson, ACT, 2602。如何处理null以获得类似116 Knox St, Watson, ACT, 2602的结果?

看起来这更简洁地实现了您的目的。

string[] data = new[] { 
    postalAddress.Line1, 
    postalAddress.Line2, 
    postalAddress.Line3, 
    postalAddress.Line4, 
    postalAddress.Suburb, 
    postalAddress.StateCode, 
    postalAddress.Pcode 
};
string address = string.Join(", ", 
                             data.Where(e => !string.IsNullOrWhiteSpace(e));

开始吧。这不是很有效,但应该有效;)

StringBuilder sb = new StringBuilder();
List<string> addressParts = new List<string> { postalAddress.Line1, postalAddress.Line2, postalAddress.Line3, postalAddress.Line4, postalAddress.Suburb, postalAddress.StateCode, postalAddress.Pcode };
addressParts.ForEach(x => sb.Append(String.IsNullOrEmpty(x) ? "" : ", " + x));
string address = sb.ToString().Trim(',');

我推荐McAden解决方案,它很优雅,很好地解决了您的问题。以下是关于如何使用StringBuilder的一个选项,与其他选项相比,它非常冗长。

如注释中所述,您可以使用StringBuilder和一系列if语句。这个代码可以很好地清理,但为了让你玩它并了解发生了什么,这里有一个例子:

var postalAddress = new {
    Line1 = "116 Knox St",
    Line2 = "",
    Line3 = "",
    Line4 = "",
    Suburb = "Watson",
    StateCode = "ACT",
    Pcode = "2602",
};
var builder = new StringBuilder();
builder.AppendFormat("{0}, ", postalAddress.Line1);
if(!string.IsNullOrEmpty(postalAddress.Line2))
{
    builder.AppendFormat("{0}, ", postalAddress.Line2);
}
if(!string.IsNullOrEmpty(postalAddress.Line3))
{
    builder.AppendFormat("{0}, ", postalAddress.Line3);
}
if(!string.IsNullOrEmpty(postalAddress.Line4))
{
    builder.AppendFormat("{0}, ", postalAddress.Line4);
}
builder.AppendFormat("{0}, ", postalAddress.Suburb);
builder.AppendFormat("{0}, ", postalAddress.StateCode);
builder.AppendFormat("{0}", postalAddress.Pcode);
var result = builder.ToString();

当您打印result变量时,您现在将得到以下结果:

116 Knox St, Watson, ACT, 2602

基本上,你可以使用AppendFormat以格式化的方式附加字符串,你可以尝试和玩这个,直到它表现得像你喜欢的那样,然后你可以重构它,使它不再是一堆行!

用一行Regex来删除重复项和空格怎么样。

address = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}",
                        postalAddress.Line1,
                        postalAddress.Line2,
                        postalAddress.Line3,
                        postalAddress.Line4,
                        postalAddress.Suburb,
                        postalAddress.StateCode,
                        postalAddress.Pcode);
address = Regex.Replace(address, @"(,s)+", @"$1");

最新更新