簡體   English   中英

具有空值C#的String.Format

[英]String.Format with null values 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);

不幸的是116 Knox St, , , , Watson, ACT, 2602當Line2,Line3,Line4為空時,這產生116 Knox St, , , , Watson, ACT, 2602 ,,, 116 Knox St, , , , Watson, ACT, 2602 如何處理空值以獲得像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語句。 Thsi代碼可以很好地清理,但是為了讓你玩它並理解發生了什么,這里有一個例子:

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以格式化的方式追加字符串,你可以嘗試和玩這個直到它按照你喜歡的方式運行,然后你可以將它重構成一堆更少的線條!

如何使用單個襯墊正則表達式刪除副本和空格。

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM