2017-02-09 202 views
1

我執行的查詢會將結果集帶回到query對象中。要建立代表查詢結果我做了一個對象:將值添加到字符串會導致添加額外的空白空間

var customer = new Customer 
{ 
    CustomerAddress = $"{query.CustomerAddress} {query.City} {query.State} {query.Zip} {query.Country}", 
    CustomerPhone = $"{query.PhoneNumber}" 
}; 

現在,如果所有query屬性填充此工作正常。但是,我意識到如果我只有Country的價值,那麼在國家名稱之前會放置四個額外的空格。

在這種情況下customer.CustomerAddress變成" United Kingdom"

調試時,我在查詢上放置了一個斷點,我可以看到query.Country前面沒有空白,它包含United Kingdom

我知道我可以使用Trim()來修剪任何空白區域,但我想知道爲什麼我會得到這種行爲。

我想避免任何空格如果任一

  • CustomerAddress的
  • 國家
  • 郵編
  • 國家

在查詢空結果集。

+0

真的不清楚你說的空白在哪裏出現。您的問題是:_「如果我沒有城市,我如何防止CustomerAddress和State之間出現兩個空格」_? – CodeCaster

+0

@CodeCaster它出現在國家名前 – Code

+1

是的,如果你的查詢包含除「Country」之外的所有屬性的空值,那麼在國家名前面會有四個空格。請閱讀[問]並提供[mcve],包括示例輸入和輸出,並解釋您想要更改的內容。 – CodeCaster

回答

5

,讓您的代碼清潔條件運算符的(string.IsNullOrWhiteSpace(query.City) ? "" : " " + query.City爲每個屬性)的溶液是添加將被打印到陣列中的所有屬性,並加入那些具有空間時,不是空白:

var addressFields = new string[] 
{ 
    query.CustomerAddress, 
    query.City, 
    query.State, 
    query.Zip, 
    query.Country, 
} 

string address = string.Join(" ", addressFields.Where(a => !string.IsNullOrWhiteSpace(a))); 
+1

這比我的選擇更好地進行清理 – TheLethalCoder

+0

謝謝你,它完美的作品。 – Code

+0

@Code我也編輯了你的問題,只包含相關的部分。請檢查它,看看它是否仍然問你想要回答的問題。 – CodeCaster

0

{query.County}在它前面有一個空格。由於所有其他值都是空的,因此您的結果看起來像[space]YourCountry

3

因爲你已明確聲明它們是字符串中的空格。請看下面的例子:

string var1 = "hello"; 
string var2 = "world"; 
string s = $"{var1} {var2}"; 

這將打印:

的hello world

現在,如果你設置var1爲空或:

var1 = ""; 

您將得到:

(空間)世界

因爲你明確指出爲了有內插字符串中的空間。爲了解決這個問題,我會拆分空格,刪除空的條目並加入一個空格:

var newS = string.Join(" ", s.Split(" ", StringSplitOptions.RemoveEmptyEntires)); 
+0

這看起來不像時間敏感的代碼,但建立一個字符串只在以後再次分裂它聽起來並不理想。但它是解決方案,所以有一個upvote。 – CodeCaster

相關問題