为什么没有空字符文字?

问题描述 投票:0回答:3

没有空的

char
文字有什么具体原因吗?

最接近我的想法的是,

''
'\0'
空字符。

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

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

在类中,我想将 char 值表示为枚举属性。 无偏见地我尝试用

''
初始化一个实例,这当然不起作用。 但不应该有
char
空值吗?不要与
string.Empty
混淆, 更多的是
null reference
的本质。

那么问题来了:为什么没有空字符呢?

-编辑-

看到这个问题这个问题可以在以下方面得到增强: 空字符值将能够连接字符串和字符,而无需 破坏字符串。这不是更好吗?或者应该这个 “按预期工作”?

c# char language-design
3个回答
6
投票

A

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

不要混淆最大长度为 1 的

char
string
。它们确实看起来很相似,但它们是非常不同的野兽。


3
投票

给出一个稍微更技术性的解释:在执行连接时,没有任何字符可以充当identity element。这与整数不同,其中

0
用作加法的单位元。


0
投票

我认为回答这个问题的最佳人选是 C# 设计团队的成员。 然而,我最好的解释是,这一切都取决于类型以及类型值的解释方式。在这种情况下,

byte
char
类型具有相同的大小,并且在大多数情况下,数学/逻辑运算符以相同的方式解释。 关键区别在于
char
背后的历史以及前 7 位的所有值均由 ASCII 定义的事实。 数值为 0 的 ASCII 码为空字符,在 C# 中用 ' ' 表示。 您的主要问题是优先级之一,当创建 C# 时,它们是建立在先前约定之上的,而不是为了支持完全一致的语言而抛弃它们。

我相当确定 C# 不会像 C 那样将字符串视为以 null 结尾。因此,我认为您可以在字符串中间有一个 null 字符,并且 C# 仍然会一直打印到末尾,但我还没有有一段时间没有验证这一点。

综上所述,您最好的选择可能是使用

bytes
,然后在需要打印时转换为字符串。

© www.soinside.com 2019 - 2024. All rights reserved.