C# 强制转换对字符串()的空字符引用
在C#.net中,如果我获取一个C# 强制转换对字符串()的空字符引用,c#,.net,C#,.net,在C#.net中,如果我获取一个字符串.Empty并在其上调用.FirstOrDefault(),以获取字符串的第一个字符,它将返回一个空字符引用,即\0,而不是一个空字符,即字符?。然后强制转换此ToString()的值与string.Empty的值不同 因此,根据我的测试,以下陈述似乎符合事实: string.Empty.FirstOrDefault().ToString()!=string.Empty ((char?)null.ToString()==string.Empty string
字符串.Empty
并在其上调用.FirstOrDefault()
,以获取字符串的第一个字符,它将返回一个空字符引用,即\0
,而不是一个空字符,即字符?
。然后强制转换此ToString()的值与string.Empty的值不同
因此,根据我的测试,以下陈述似乎符合事实:
string.Empty.FirstOrDefault().ToString()!=string.Empty
((char?)null.ToString()==string.Empty
string.Empty.FirstOrDefault().ToString()='\0'.ToString()
是我一个人,还是感觉不一致?这对我一开始并不明显,我假设string.Empty.FirstOrDefault().ToString()
将解析为与string.Empty
相同的值。有人能把我链接到更深入地介绍这个问题的文档吗?string
是一个IEnumerable
,所以空字符串上的FirstOrDefault()
返回default(char)
,而不是default(char?
默认值(字符)
为'\0'
(几乎)不可能编写一个通用方法来处理引用类型,但返回值类型的T?
(这是您在这里所期望的)
string.Empty
=“
是长度为0
的字符数组
string.Empty.FirstOrDefault()
是default(char)
,它是'\0'
(FirstOrDefault
如果源为空,则返回default(T)
)
string.Empty.FirstOrDefault().ToString()
=默认值(char.ToString()
=“\0”
char?
可为null
,如果您检查ToString()
实现是否可为null
这意味着,((char?)null.ToString()
返回”
(或字符串.Empty
)。字符串.Empty.FirstOrDefault()返回什么?你认为这是为什么?另外,创建一个名为bob
的int空数组。bob.FirstOrDefault()
会返回什么?为什么?是的,我知道,但是为什么'\0'.ToString()!=string.Empty
?我一只手拿着一个鸡蛋容器,里面没有鸡蛋。我有另一个鸡蛋容器,里面有一个鸡蛋,但那个鸡蛋没有蛋黄。那两个鸡蛋容器里的东西一样吗?我有一个没有字符的字符串。我有一个字符串,里面有一个(当然是奇数)字符。这两个字符串相等吗?文档并没有涵盖所有可能的人都无法理解的所有内容@Oxymoron。这里的问题是你的思维模式是错误的。你在问“为什么这两个不同的东西不相等”,奇怪的是,答案是它们不相等。“为什么一个可空字符的字符串与字符串.Empty的值不匹配”,因为string.Empty
没有字符。您正在请求FirstOrDefault,并且正在返回default(char)
(因为没有“First”)<代码>字符串.Empty!=“\0”
@矛盾修饰法:是;这正是问题所在。让我直截了当地说吧——空字符的集合并不等于没有字符?@Oxymoron correct。空字符是一个字符。
public override string ToString()
{
if (!this.hasValue)
return "";
return this.value.ToString();
}