正如标题所说.与此问题相关.
为什么以下代码不起作用?这在逻辑上看似合理.
string foo = 'a' + 'b'; // Fails with an invalid int -> string conversion
现在,从上面的链接问题我们可以推断出这里发生了什么:编译器使用隐式char - > int转换,然后添加这些值.这让我相信一定不能为char
s 定义一个加法运算!这是真的,如果是的话,为什么没有呢?
编辑:普遍的共识是,没有一个定义的那么多,我预期定义的那个不是.
首先,关于你的演绎过程.你的推论 - 这个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 foo = String.Concat('a', 'b');
无论如何编译器对字符串的'+'运算符执行的操作.
这大约是任何String.Format
操作的两倍.