4

我有以下代码:

private const FlyCapture2Managed.PixelFormat f7PF = FlyCapture2Managed.PixelFormat.PixelFormatMono16;

public PGRCamera(ExamForm input, bool red, int flags, int drawWidth, int drawHeight) {
   if (f7PF == FlyCapture2Managed.PixelFormat.PixelFormatMono8) {
      bpp = 8;  // unreachable warning
   }
   else if (f7PF == FlyCapture2Managed.PixelFormat.PixelFormatMono16){
      bpp = 16;
   }
   else {
      MessageBox.Show("Camera misconfigured");  // unreachable warning
   }
}

我知道此代码无法访问,但我不希望出现该消息,因为它是编译时的配置,只需要更改常量即可测试不同的设置,并且每像素位数 (bpp) 会根据像素格式。有没有一种好方法可以让一个变量保持不变,从它派生另一个变量,但不会导致无法访问的代码警告?请注意,我需要这两个值,在相机启动时需要将其配置为正确的像素格式,并且我的图像理解代码需要知道图像的位数。

那么,是否有一个好的解决方法,或者我只是忍受这个警告?

4

4 回答 4

9

最好的方法是禁用文件顶部的警告:

#pragma warning disable 0162

另一种方法是将您的const转换为static readonly.

private static readonly FlyCapture2Managed.PixelFormat f7PF = 
                        FlyCapture2Managed.PixelFormat.PixelFormatMono16;

但是,如果性能对您的代码很重要,我建议保留它const并禁用警告。尽管conststatic readonly在功能上是等效的,但前者允许更好的编译时优化,否则可能会丢失。

于 2013-07-01T10:18:35.320 回答
6

作为参考,您可以通过以下方式将其关闭:

#pragma warning disable 162

..并重新启用:

#pragma warning restore 162
于 2013-07-01T10:19:18.880 回答
2

您可以用查找替换条件Dictionary以避免警告:

private static IDictionary<FlyCapture2Managed.PixelFormat,int> FormatToBpp =
    new Dictionary<FlyCapture2Managed.PixelFormat,int> {
        {FlyCapture2Managed.PixelFormat.PixelFormatMono8, 8}
    ,   {FlyCapture2Managed.PixelFormat.PixelFormatMono16, 16}
    };
...
int bpp;
if (!FormatToBpp.TryGetValue(f7PF, out bpp)) {
    MessageBox.Show("Camera misconfigured");
}
于 2013-07-01T10:21:01.500 回答
1

有可能,加个

#pragma warning disable 0162

在你的领域之前。要恢复把它放在最后

#pragma warning restore 0162. 更多信息在这里MSDN

于 2013-07-01T10:20:12.640 回答