gpt4 book ai didi

c# - 获取未设置为对象实例的对象引用的空引用对象类型

转载 作者:行者123 更新时间:2023-11-30 21:19:47 25 4
gpt4 key购买 nike

自从我开始编程以来,这个问题一直困扰着我,不是“我的代码在哪里为空”,而是有什么方法可以从异常中获取空对象的类型?

如果做不到这一点,任何人都可以提供博客文章或 msdn 文章来解释 .NET Framework 不(或不能)提供这些详细信息的原因吗?

最佳答案

嗯...因为它是空的。

在 C# 中,引用类型是指向某物的指针。空指针不指向任何东西。你在问,“如果它指向某物,它会指向什么类型的东西”。这有点像拿一张白纸,然后问:“如果上面写了一些东西,这张纸会说什么?”

更新:如果框架不知道空指针的类型,它就不能知道它应该是什么类型吗?好吧,它可能。再一次,它可能不会。考虑:

 MyClass myobj = null;
int hash = myobj.GetHashCode();

除非您在 MyClass 中覆盖它,否则 GetHashCode 是在 System.Object 中定义的。您应该提示 myobj 需要是 System.Object 吗?现在,当我们检查自己时,我们可以完全自由地指定所需的类型。

  SomeFunc(MyClass myparam)
{
if (myparam == null)
throw new ArgumentNullException("myparam must be a MyClass object");
}

但现在我们谈论的是应用程序代码,而不是 CLR 代码。这让你成为“真正的”问题“为什么人们不写更多信息丰富的异常消息?”,正如我们在 SO 上所说的“主观和争论性的

所以,您基本上希望系统级异常知道仅在应用程序级知道的类型信息,我们需要这样的方式进行通信。像这样的东西:

  SomeFunc(MyClass myparam)
{
if (myparam == null)
throw new ArgumentNullException("myparam", typeof(MyClass));
}

但这并不能真正让我们买多少,如果你真的想要它,你可以自己写:

  public class MyArgumentNullException : ArgumentNullException
{
public MyArgumentNullException(string name, Type type)
:base(name + "must be a " + type.Name + " object");
}

关于c# - 获取未设置为对象实例的对象引用的空引用对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com