不能隐式转换类型'int'到LittleEndian字节顺序

本文关键字:LittleEndian 字节 顺序 int 类型 不能 转换 | 更新日期: 2023-09-27 18:13:49

我有一个问题,我的函数加载RAW图像。我不明白这个错误的原因。它显示了这个错误:

不能隐式地将int类型转换为Digital_Native_Image.DNI_Image.Byteorder

public void load_DNI(string ficsrc)
{
    FileStream FS = null;
    BinaryReader BR = null;
    int width = 0;
    int height = 0;
    DNI_Image.Datatype dataformat = Datatype.SNG;
    DNI_Image.Byteorder byteformat = Byteorder.LittleEndian;
    FS = new FileStream(ficsrc, System.IO.FileMode.Open);
    BR = new BinaryReader(FS);
    dataformat = BR.ReadInt32();
    byteformat = BR.ReadInt32();
    width = BR.ReadInt32();
    height = BR.ReadInt32();
    // fermeture des fichiers
    if ((BR != null))
        BR.Close();
    if ((FS != null))
        FS.Dispose();
    // chargement de l'_image
    ReadImage(ficsrc, width, height, dataformat, byteformat);
}

不能隐式转换类型'int'到LittleEndian字节顺序

int 's不能隐式地转换为enum 's,您需要在这里添加显式强制转换:

dataformat = (Datatype.SNG)BR.ReadInt32();
byteformat = (Byteorder)BR.ReadInt32();

有关更多信息,请阅读《c#编程指南》中的强制转换和类型转换。

然而,注意if (BR != null)检查是不必要的,这真的不是正确的方式来处理IDisposable对象。我建议您重写此代码以使用using块。这将确保FSBR得到正确的处理:

int width;
int height;
Datatype dataformat;
Byteorder byteformat;
using (var FS = FileStream(ficsrc, System.IO.FileMode.Open))
using (var BR = new BinaryReader(FS))
{
    dataformat = (Datatype.SNG)BR.ReadInt32();
    byteformat = (Byteorder.LittleEndian)BR.ReadInt32();
    width = BR.ReadInt32();
    height = BR.ReadInt32();
}
// chargement de l'_image
ReadImage(ficsrc, width, height, dataformat, byteformat);

但似乎你也可以通过重构ReadImage方法来使用相同的BinaryReader来改进这一点。然后,您可以重写此方法,使其看起来更像这样:

using (var FS = FileStream(ficsrc, System.IO.FileMode.Open))
using (var BR = new BinaryReader(FS))
{
    var dataformat = (Datatype.SNG)BR.ReadInt32();
    var byteformat = (Byteorder.LittleEndian)BR.ReadInt32();
    var width = BR.ReadInt32();
    var height = BR.ReadInt32();
    ReadImage(ficsrc, width, height, dataformat, byteformat, BR);
}