2017-02-09 12 views
1

私が実行したクエリは、結果セットをqueryオブジェクトに戻します。すべてqueryプロパティが移入された場合、これは正常に動作今文字列に値を追加すると余分な空白が追加されます

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

:私は、クエリの結果を表すオブジェクトを構築します。しかし、もし私がCountryの値を持っていれば、国名の前に余分な4つのスペースが置かれていることに気付きました。

この場合、customer.CustomerAddress" United Kingdom"になります。

デバッグ時に、クエリにブレークポイントを配置すると、query.Countryの前に空白がなく、United Kingdomが含まれていることがわかります。

私はTrim()を使用して空白を削除することができますが、なぜこのような動作をするのか不思議でした。

私は

  • のいずれかCustomerAddress
  • ジップ

クエリで空になっている場合は任意の空白を持つ避けたいです結果セット。

+0

あなたが話している空白がどこに表示されているのかは本当に不明です。あなたの質問です:_「市がない場合、CustomerAddressと州の間に2つのスペースが表示されないようにするにはどうすればよいですか? – CodeCaster

+0

@CodeCaster国名の直前に表示されます – Code

+1

そうですが、 'query'に' Country'を除くすべてのプロパティにnullが含まれている場合、国名の前に4つのスペースがあります。 [ask]を読んで、入力と出力の例を含む[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

@コードまた、関連する部分のみを含むように質問を編集しました。それを見直して、あなたが答えたい質問をまだ聞いているかどうかを見てください。 – CodeCaster

0

{query.County}の前にスペースがあります。その他の値はすべて空であるため、結果は[space]YourCountryのようになります。

3

文字列内の空白を明示しているためです。次の例を参照してください:

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

はこれが印刷されます:

ハロー世界

あなたは空にし var1を設定した場合、今

か:

var1 = ""; 

あなたが取得します。

(スペース)世界

あなたは明示的に補間された文字列にスペースが存在することが述べられているので。これを回避するには空白に分割し、空のエントリを削除してスペースで結合します。

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

これは時間の影響を受けやすいコードのようには見えませんが、後で再分割する文字列を作成すると最適とは言えません。しかしそれは解決策であるので、upvoteを持っています。 – CodeCaster

関連する問題