我刚刚发现下面的代码返回 false:
((byte)'\n').ToString().Contains('\n') // -> false
虽然这个返回 true:
'\n'.ToString().Contains('\n') // -> true
这是为什么呢?
(byte)'\n'
和'\n'
的字符代码从'\n' == 10 < 256
开始是相同的,所以无论编码如何,存储的值都应该相同,两种情况下最高位都是0...
我不知道为什么会发生这种情况,因为对于类型化语言来说相对较新。
'\n'.ToString()
将 char
\n
转换为字符串,结果是一个带有换行符的单字符字符串。
当你检查它是否包含换行符时,结果自然是True
。
(byte)'\n').ToString()
首先将char
\n
转换为byte
,即8位整数值10。然后将10
转换为字符串,结果为"10"
。False
。