【问题标题】:NullReferenceException while creating new instance of a class [duplicate]创建类的新实例时出现 NullReferenceException [重复]
【发布时间】:2014-01-07 18:40:17
【问题描述】:

据我所知,错误发生在以下行之一:

SomeClass foo = new SomeClass();
foo.getSomeStuff(id1,id2,id3, connectionString, UserName, Password, out html, out xml);

SomeClass 基本上是这样的:

public class SomeClass
{
    private static System.AppDomain SomeDomain { get; set; }
    private static SomeUtility utility { get; set; }

    static SomeClass()
    {
        InitializeSomeClass();
    }


    private static void InitializeSomeClass()
    {
        //code here
        utility = (SomeUtility)SomeDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "SomeUtility");
    }

    public void getSomeStuff(int id1, int id2, int id3, string connectionString, string UserName, string Password, out string html, out string xml)
    {
        html = xml = "";
        utility.ExtractContent(id1, id2, id3, connectionString, UserName, Password, out html, out xml);
    }

}

在将本准则翻译成更笼统的术语时,我误读了它。我已经纠正了。这还有意义吗?

我对静态构造函数的经验很少,但我的直觉告诉我问题可能出在某个地方。

【问题讨论】:

  • 错误在SomeOtherClass.methodThatSetsUtility();可能
  • 您的html = xml = ""; 行是不需要的,因为在它具有设置这两个变量的out 参数之后的方法调用。
  • 我同意 leppie 的观点。机会是 methodThatSetsUtility();正在返回 null。

标签: c# nullreferenceexception static-constructor


【解决方案1】:

在您的示例代码中,当您执行以下行时,SomeDomain 属性从未被初始化:

utility = (SomeUtility)SomeDomain.CreateInstanceAndUnwrap(...)

更一般地说,查看堆栈跟踪和/或在调试器下运行 - 您很快就会看到哪一行出现故障以及原因。

【讨论】:

  • 希望我可以在调试器下运行。这只会发生在客户端的服务器上,所以我能做的最好的事情就是编写日志语句来查看它发生在哪里。日志语句在上面提到的那一行变暗。在 SomeClass foo = new SomeClass();
  • 堆栈跟踪说明了什么?抛出异常时,您可以获得堆栈跟踪的日志副本吗?
【解决方案2】:

我相信我找到了问题所在。它发生在“//code here”部分的第 3 方程序集中。出于安全目的,我之前没有包含代码,但我将与第 3 方一起解决问题。谢谢大家!

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多