Не удалось неявно преобразовать тип int в LittleEndian ByteOrder

У меня проблема с функцией загрузки изображений в формате 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);
}

1 ответ

Решение

int не может быть неявно преобразовано в enum "S. Вы должны добавить явные приведения здесь:

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

Прочитайте приведение типов и приведение типов (Руководство по программированию в C#) для получения дополнительной информации.

Тем не менее, обратите внимание, что if (BR != null) проверка не нужна, и это действительно не правильный способ обработки IDisposable объекты. Я бы посоветовал вам переписать этот код для использования using блоки Это обеспечит FS а также BR правильно распоряжаться:

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);
}
Другие вопросы по тегам