我有一行代码看起来像这样:
MyObject.PhoneNumber = '+' + ThePhonePrefix + TheBizNumber;
基本上,我创建了一个 E164 格式的电话号码,然后将该字符串分配给一个对象的字符串属性。 ThePhonePrefix 是包含国际电话前缀的短字符,TheBizNumber 是包含电话号码数字的字符串。
为什么当我首先在字符串中连接一个 short 时编译器没有出现错误?然后为什么 '+' + 1 等于 44?这是一个很难跟踪的错误,因为没有编译错误,而且 44 是英国的电话前缀,所以一切“看起来”都在工作,因为客户端代码只看到一个英国号码。为什么是 44?
最佳答案
Why didn't the compiler bug when I was concatenating a short in the string in the first place?
使用 +
符号的字符串连接在内部调用 string.Concat
,后者在每个参数上内部调用 ToString
。因此没有错误。
why does '+' + 1
你正在做字符/数字运算。 43
是 +
和 short/int 1
的值是 44。
由于运算符 + 结合性,从左到右是第一个字符/数字加法,然后是字符串连接。
就是这样:
MyObject.PhoneNumber = ('+' + ThePhonePrefix) + TheBizNumber;
您可以使用 "+"
将其标记为字符串或显式调用 String.Concat
,例如:
var result = string.Concat('+', ThePhonePrefix, TheBizNumber);
关于c# - 为什么 '+' + 短转换为 44,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397495/