对于以下代码,我得到一个编译时错误,*
int i = 0;
lock(i);
但这没有错误:
int i = 0;
Monitor.Enter(i);
我知道,由于装箱带来的复杂性,不应将值类型用于锁定。但是,那为什么它可以与Monitor一起使用呢?
最佳答案
锁定的原因是一种语言构造,编译器选择在表达式上加上额外的语义。 Monitor.Enter只是方法调用,而C#编译器在任何情况下都不对调用进行特殊处理,因此它会通过常规的重载解析和装箱处理。
关于c# - 为什么不允许使用lock(<integer var>),但允许Monitor.Enter(<integer var>)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1329919/