我执行的查询将结果集带回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()
修剪任何空格,但我想知道为什么会出现这种行为。
如果
中的任何一个,我想避免任何空格在查询结果集中为空。
答案 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}
。