c# - 为什么 '+' + 短转换为 44

标签 c#

我有一行代码看起来像这样:

MyObject.PhoneNumber = '+' + ThePhonePrefix + TheBizNumber;

基本上,我创建了一个 E164 格式的电话号码,然后将该字符串分配给一个对象的字符串属性。 ThePhonePrefix 是包含国际电话前缀的短字符,TheBizNumber 是包含电话号码数字的字符串。

为什么当我首先在字符串中连接一个 short 时编译器没有出现错误?然后为什么 '+' + 1 等于 44?这是一个很难跟踪的错误,因为没有编译错误,而且 44 是英国的电话前缀,所以一切“看起来”都在工作,因为客户端代码只看到一个英国号码。为什么是 44?

enter image description here

最佳答案

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/

相关文章:

c# - 标准属性有效,但依赖属性在 WPF 中无效

c# - 如何将异常标记为已记录(并且只记录一次)?

c# - 在 F# 中声明私有(private)静态成员?

c# - 从 Android 应用程序读取 Unity 中的串行数据

c# - 在 SQLite + BEGIN TRANSACTION 中更新更快

c# - 使用 C# 的 Optimus headless 浏览器

c# - 如何跨进程边界编码进程外 COM 引用?

c# - 意外输出打印长数字

c# - .NET 中的变量新鲜度保证( volatile 与 volatile 读取)

c# - 从经典 ASP 迁移到 ASP.Net 的困惑