没有空的
char
文字有什么具体原因吗?
最接近我的想法的是,
''
是 '\0'
空字符。
在
C++
中,char
由int
表示,这意味着空字符直接指向0整数值,这在C++中“与null相同”。
提出这个问题的实际部分:
在类中,我想将 char 值表示为枚举属性。 无偏见地我尝试用
''
初始化一个实例,这当然不起作用。
但不应该有 char
空值吗?不要与string.Empty
混淆,
更多的是 null reference
的本质。
那么问题来了:为什么没有空字符呢?
-编辑-
看到这个问题这个问题可以在以下方面得到增强: 空字符值将能够连接字符串和字符,而无需 破坏字符串。这不是更好吗?或者应该这个 “按预期工作”?
A
char
根据定义,长度为一个字符。空根本不符合要求。
不要混淆最大长度为 1 的
char
和 string
。它们确实看起来很相似,但它们是非常不同的野兽。
给出一个稍微更技术性的解释:在执行连接时,没有任何字符可以充当identity element。这与整数不同,其中
0
用作加法的单位元。
我认为回答这个问题的最佳人选是 C# 设计团队的成员。 然而,我最好的解释是,这一切都取决于类型以及类型值的解释方式。在这种情况下,
byte
和 char
类型具有相同的大小,并且在大多数情况下,数学/逻辑运算符以相同的方式解释。 关键区别在于 char
背后的历史以及前 7 位的所有值均由 ASCII 定义的事实。 数值为 0 的 ASCII 码为空字符,在 C# 中用 ' ' 表示。 您的主要问题是优先级之一,当创建 C# 时,它们是建立在先前约定之上的,而不是为了支持完全一致的语言而抛弃它们。
我相当确定 C# 不会像 C 那样将字符串视为以 null 结尾。因此,我认为您可以在字符串中间有一个 null 字符,并且 C# 仍然会一直打印到末尾,但我还没有有一段时间没有验证这一点。
综上所述,您最好的选择可能是使用
bytes
,然后在需要打印时转换为字符串。