c# - 空只读锁对象

标签 c#

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

validate 方法有几次工作正常,然后在它被调用 2-3 次后 _lock 对象为空。这是否表明该锁由另一个线程拥有?

enter image description here

最佳答案

除了反射之外,this(更具体地说,通过初始化程序分配的静态变量上的空引用异常)可能发生的另一种方式是,如果您在类的其他地方定义了静态构造函数由于某种原因将该值设置为 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();
    }
}

关于c# - 空只读锁对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161037/

相关文章:

c# - 在构建中包含数据库文件

c# - 从具有命名空间的 XmlNodeList 中提取节点,并且相同的子节点出现在多个级别

c# - 无法将 Xaml 中的 SelectedIndex ="0"设置为 ListView(Windows 应用商店应用程序)

c# - 如何拥有适用于控制台和 wpf 的 calibburn 应用程序?

c# - 将 Datagridview 发送到电子邮件

c# - 在 Azure Cosmos DB 中使用 REST 进行 CRUD 操作

c# - 我如何从 xmlnodelist 中获取 xml 节点

c# - WP8列表框加载MVVM

c# - 如何使用 C#.net 在 win 7 中将 Datetimepicker 控件的日期更改为波斯语

c# - 找不到网络路径。提供程序 : Named Pipes Provider, 错误:40 - 无法打开与 SQL Server 的连接