为什么空字符串不是字符串对象
本文关键字:字符串 对象 为什么 | 更新日期: 2023-09-27 18:21:24
考虑以下代码:
class Program
{
static void Main(string[] args)
{
string s = null;
bool b = s is string;
Console.WriteLine(b);
}
}
在上面的代码s is string
中,但是b是false
。
实际上是字符串,为什么我得到这个结果?
编译器为什么会有这种行为?
在评估语句时,运行时必须首先跟随变量所引用的引用。只有这样,它才能评估被引用的对象,以确定它是否确实是一个字符串。
由于null
引用不引用任何对象,因此它不是字符串。事实上,这根本不是什么。
您可以使用typeof
运算符来获取与字符串对应的Type
对象,而不是比较被引用的对象,如果这是您的最终目标的话。
这实际上是Eric Lippert在一篇关于的博客文章中给出的一个特别的例子
我注意到is运算符在C#中是不一致的。看看这个:
string s = null; // Clearly null is a legal value of type string bool b = s is string; // But b is false!
怎么了?
--http://ericlippert.com/2013/05/30/what-the-meaning-of-is-is/
变量s
是一个可能指向字符串在内存中的位置的引用,但您还没有将其指向字符串-它指向"null"。当你问s is string
时,你说的是"引用s
是否指向内存中字符串的位置",在你的情况下,答案是"否"。
null关键字是一个表示null引用的文字,不引用任何对象。
http://msdn.microsoft.com/en-us/library/edakx9da.aspx
s is string
为false,因为s
没有引用string
的实例-s
为null。