Con*_*ngo 49 .net c# visual-studio
对于这个C#a==true,:
bool a = "hello" + '/' + "world" == "hello/world";
Run Code Online (Sandbox Code Playgroud)
对于这个C#b==true,:
bool b = "hello" + + '/' + "world" == "hello47world";
Run Code Online (Sandbox Code Playgroud)
我想知道这是怎么回事,更重要的是,为什么C#语言架构师会选择这种行为?
Cyr*_*ral 51
第二个+是将其转换char为a int,并将其添加到字符串中.ASCII值为/47,然后由另一个+运算符转换为字符串.
该+斜线前操作隐含它转换为int.请参阅MSDN上的+运算符,然后查看"一元加号".
对数字类型进行一元+运算的结果就是操作数的值.
我实际上通过查看+操作员实际调用的内容来解决这个问题.(我认为这是ReSharper或VS 2015功能)
Guf*_*ffa 26
那是因为你使用的是一元运算符+.它与一元运算符类似-,但它不会改变操作数的符号,因此它在此处唯一的作用是隐式将字符'/'转换为int.
值的值是47 +'/'的字符代码/.
代码与以下内容相同:
bool b = "hello" + (int)'/' + "world" == "hello47world";
Run Code Online (Sandbox Code Playgroud)
Raw*_*ing 16
我听到你问,为什么char特别对待操作员,int operator +(int x)而不是其他许多精细的一元+操作员?
char没有任何这些,编译器会在预定义的一元+运算符.char任何的,所以编译器使用重载决策规则来决定哪个运营商(中int,uint,long,ulong,float,double decimal)是最好的.char.int击败了long,float而且double因为你可以隐式转换 int到这些类型,而不是回来.int节拍uint,ulong因为...最好的转换规则说它确实如此.| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |