对于以下代码,我得到一个编译时错误,*


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/

10-13 01:38