【问题标题】:Why is there no empty char literal?为什么没有空字符文字?
【发布时间】:2013-07-15 03:09:00
【问题描述】:

没有空的char字面量有什么具体原因吗?

最接近我的想法的是,'''\0' 空字符。

C++ 中,charint 表示,这意味着空字符直接指向整数值 0,在 C++ 中“与 null 相同”。

提出这个问题的实际部分:

在一个类中,我想将 char 值表示为枚举属性。 不偏不倚,我尝试用'' 初始化一个实例,这当然行不通。 但是不应该有char 空值吗?不要与string.Empty 混淆, 更多的是null reference 的性质。

所以问题是:为什么没有空字符?

-编辑-

看到this question 问题可以在以下方面得到加强: 一个空的 char 值可以连接字符串和字符,而无需 破坏字符串。那不是更可取吗?或者应该这样 “按预期工作”?

【问题讨论】:

  • 没有重复,因为问题在 Char 类上,我想知道它背后的设计决策。
  • char 是原始类型。 null char 没有比 null int 更有意义
  • 我已经看到了那个评论,那么int? 呢?这也没有意义吗?这显然是一个设计决定,当然有明确的原因。一个空字符将是......空的。 string.Empty.中所有字符的总和。

标签: c# char language-design


【解决方案1】:

根据定义,char 的长度为一个字符。空的根本不符合要求。

不要混淆 char 和最大长度为 1 的 string。它们看起来确实很相似,但是却是截然不同的野兽。

【讨论】:

  • 这使得char 听起来像string,其长度限制为1。事实并非如此。关键是char是一个值类型。
  • 不,我没有混淆它,这就是我提出问题的原因。不应该有一个空字符,就像有一个空引用一样?
  • @dbt:值类型方法似乎最有意义。但是我仍然认为空值是有意义的,但是这里出现了?,它没有提供我对 char 空值所期望的语义。但是保持现有的内容通常是一个非常好的主意,因此它的行为主要类似于 C++ 或 Java,开发人员不必重新考虑那么多。
  • @dtb 好吧,我写了 “它们确实看起来很相似,但它们是非常不同的野兽。”,所以让它们听起来相似并不是我的意图
【解决方案2】:

给出一个稍微技术性的解释:在执行连接时,没有字符可以用作identity element。这与整数不同,整数中0 用作加法的标识元素。

【讨论】:

  • 就像 1 对乘法一样,这正是我要问的。为什么没有?
  • @MareInfinitus 连接两个字符“a”和“b”不会给出字符。为什么你会期望它会有一个特殊的价值?
  • @Lee:阅读问题的最后一部分(编辑后)。这都是关于身份的。
  • @bengiesboom:我希望连接 'a''' 得到一个长度为 1 的字符串。
  • 更具体:我希望连接 'a' + '' + 'b' 给出一个长度为 2 的字符串,而 'a' + '\0' + 'b' 给出一个字符串长度一。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多