当前位置:  开发笔记 > 编程语言 > 正文

为什么C#没有为char定义一个加法运算?

如何解决《为什么C#没有为char定义一个加法运算?》经验,为你挑选了2个好方法。

正如标题所说.与此问题相关.

为什么以下代码不起作用?这在逻辑上看似合理.

string foo = 'a' + 'b'; // Fails with an invalid int -> string conversion

现在,从上面的链接问题我们可以推断出这里发生了什么:编译器使用隐式char - > int转换,然后添加这些值.这让我相信一定不能为chars 定义一个加法运算!这是真的,如果是的话,为什么没有呢?

编辑:普遍的共识是,没有一个定义的那么多,我预期定义的那个不是.



1> Eric Lippert..:

首先,关于你的演绎过程.你的推论 - 这个char被转换为int,因此没有在char上定义的加法运算符 - 是现货,对你很好.但我注意到扣除过程是不必要的.您可以简单地阅读规范的第7.7.4节,其中清楚地描述了所有内置的附加运算符.简而言之,它们是int + int,uint + uint,long + long,ulong + ulong,float + float,double + double,decimal + decimal,enum-and-underlying类型,委托组合,字符串+字符串,字符串+对象和对象+字符串.(当然,那些涉及值类型的那些提升到可以为空的版本.)所以是的,没有添加运算符可以使用字符.

第二,回答你的"为什么不呢?" - 字符有点奇怪.它们的存储是短整数,但它们的语义是字符串中的字符.那么char应该被视为整数形式还是短字符串?在这种情况下,语言设计者决定遵循早期语言(如C语言)的引导,并在对不涉及字符串的数学进行数学处理时将字符视为整数.如果您想将它们视为短字符串,可以使用多种方法将字符串转换为字符串.如另一个答案所示,附加空字符串,明确地告诉编译器"此操作是在字符串上,而不是在字符的整数值上".


添加空字符串是非常难看的风格.String.Concat是要走的路.

2> John Gietzen..:

你真正想要的是这个:

string foo = String.Concat('a', 'b');

无论如何编译器对字符串的'+'运算符执行的操作.

这大约是任何String.Format操作的两倍.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有