2017-02-09 131 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

相关问题