向字符串添加值会导致添加额外的空白区域

时间:2017-02-09 12:03:18

标签: c#

我执行的查询将结果集带回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
  • 国家
  • 邮编
  • 国家

在查询结果集中为空。

3 个答案:

答案 0 :(得分: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 :(得分:3)

因为你已经明确声明它们是字符串中的空格。请参阅以下示例:

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

这将打印:

  

你好世界

现在,如果您将var1设置为空或:

var1 = "";

你会得到:

  

(空格)世界

因为您明确声明插值字符串中有空格。为了解决这个问题,我会拆分空格,删除空条目并加入空格:

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

答案 2 :(得分:0)

pets<animal>前面有一个空格。由于所有其他值均为空,因此您的结果现在看起来像{query.County}