我收集了一些角落案例和脑筋急转弯,并且总是希望听到更多.该页面仅涵盖C#语言位和bobs,但我也发现核心.NET的东西也很有趣.例如,这是一个不在页面上,但我觉得不可思议的:
string x = new string(new char[0]);
string y = new string(new char[0]);
Console.WriteLine(object.ReferenceEquals(x, y));
Run Code Online (Sandbox Code Playgroud)
我希望打印False - 毕竟,"new"(带引用类型)总是会创建一个新对象,不是吗?C#和CLI的规范都表明它应该.好吧,不是在这种特殊情况下.它打印True,并在我测试过的每个版本的框架上完成.(我没有在Mono上尝试过,诚然......)
需要明确的是,这只是我正在寻找的那种事情的一个例子 - 我并不是特别想要讨论这种奇怪的事情.(它与正常的字符串实习不同;特别是,当调用构造函数时,通常不会发生字符串实习.)我真的要求类似的奇怪行为.
还有其他宝石潜伏在那里吗?
我有.NET应用程序,崩溃了NullReferenceException。有趣的是,日志显示如下:
Inner Exception System.NullReferenceException: Object reference not set to an instance of an object.
at System.Object.GetType()
Run Code Online (Sandbox Code Playgroud)
令我感到困惑的是,该异常发生在GetType内部,而不是在调用GetType的行上。我已经测试了以下情况。
如果我在一个null对象上调用GetType,则异常发生在调用GetType的行上,而不是在GetType内。我也尝试过如何在此代码示例中获取NullReferenceException?但是奇怪的是我在Program.Main中得到了异常,而不是在Object.GetType中(尽管在那篇文章中它在GetType中)。
我还尝试了同时创建对象和调用GetType的尝试,但总而言之,在创建.net对象时没有窗口,其中GetType抛出NullReferenceException。我现在唯一想到的是,这可能是某些较旧的.NET实现的行为。
因此,无论如何在GetType中引起NullReferenceException的任何想法,如果可以提供概念证明代码,我将万分感激。感谢您的时间。