在检查是否有摄像头并在Windows移动设备上启用了摄像头时,遇到了我不了解的问题。
代码如下:
public static bool CameraP(){
return Microsoft.WindowsMobile.Status.SystemState.CameraPresent;
}
public static bool CameraE()
{
return Microsoft.WindowsMobile.Status.SystemState.CameraEnabled;
}
public static bool CameraPresent1()
{
return Microsoft.WindowsMobile.Status.SystemState.CameraPresent
&& Microsoft.WindowsMobile.Status.SystemState.CameraEnabled;
}
public static bool CameraPresent2()
{
return CameraP() && CameraE();
}
当我调用
CameraPresent2()
时,它返回false(没有摄像头)。但是,当我调用CameraPresent1()
时,我收到一条MissingMethodException并带有注释“找不到方法:get_CameraEnabled Microsoft.WindowsMobile.Status.SystemState”。仅因为它们都是属性(在语言级别上),才在
CameraPresent1
中评估第二个术语吗?还有什么可以解释行为差异的吗?
最佳答案
第二项不评估。
不评估第一项。CameraPresent1()
方法甚至没有开始执行。
首次调用CameraPresent1()
时,运行时必须将MSIL JIT编译为本地代码。这要求解决所有方法调用,甚至可能只有有条件才能达到的方法调用。使用MissingMethodException
编译失败。
使用CameraPresent2()
时,仅在首次调用CameraEnabled
时才编译对CameraE()
的getter的调用,这永远不会发生。
关于c# - 为什么短路不能阻止与逻辑AND(&&)的不可达分支相关的MissingMethodException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5233155/