Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空只读锁对象_C# - Fatal编程技术网

C# 空只读锁对象

C# 空只读锁对象,c#,C#,静态只读对象如何变为空?(我已将_lock对象设置为静态而非静态,但始终为只读。) validate方法可以正常工作几次,然后在调用2-3次后_lock对象为null。这是否表示锁属于另一个线程 除了反射之外,发生这种情况的另一种方式(更具体地说,通过初始值设定项分配的静态变量上的null引用异常)是,如果您在类的其他地方定义了静态构造函数,并且由于某种原因将值设置为null,例如: class Program { class A { private static

静态只读对象如何变为空?(我已将_lock对象设置为静态而非静态,但始终为只读。)

validate方法可以正常工作几次,然后在调用2-3次后_lock对象为null。这是否表示锁属于另一个线程


除了反射之外,发生这种情况的另一种方式(更具体地说,通过初始值设定项分配的静态变量上的null引用异常)是,如果您在类的其他地方定义了静态构造函数,并且由于某种原因将值设置为null,例如:

class Program
{
    class A
    {
        private static readonly object _lock = new object();

        public void Validate()
        {
            lock (_lock) // NullReferenceException here...
            {
                Console.WriteLine("Not going to make it here...");
            }
        }

        static A()
        {
            Console.WriteLine(_lock.ToString());
            Console.WriteLine("Now you can see that _lock is set...");
            _lock = null;
        }
    }

    static void Main(string[] args)
    {
        var a = new A();
        a.Validate();
    }
}

如果你滥用反思,这种情况可能会发生。您确信您的代码中没有任何内容可以这样做吗?(
typeof(YourClass).GetField(“_lock”,BindingFlags.NonPublic | BindingFlags.Static)。SetValue(null,null)
会将字段设置为null)@Community:这是一个有效的问题,请不要将其作为“offtopic”关闭,因为它显然是无效的。您能否尝试将代码缩减为空?删除代码,直到a)它是最小的,您可以将其发布到此处,或者b)问题消失,您自己找到答案。Visual Studio对名称下划线处的
\u lock
的定义怎么说?您需要发布一个好的代码示例。调试器中几行代码的屏幕截图无法提供足够的上下文,任何人都无法告诉您发生了什么。看到了吗,好吧,所以他说,列出另一种可能发生的方式是错误的吗?“可能发生的方式”——“它”的另一种方式?另一种故意破坏代码的方法?很抱歉,你的回答没有以任何方式回答这个问题。他说它是有效的,但根据截图,它显然不是——所以问题是为什么。我提供的其中一个原因可能是为什么。@F.Buster,但您的原因不可能是OP问题的解释。因为如果它真的起作用,静态初始值设定项将字段设置为null就不负责任了。@KirkWoll公平地说,因为问题缺少细节,而且这似乎是一个边缘案例,所以可以不做任何假设。这也包括质疑OP的假设,比如“验证方法可以正常工作几次”。