Исключение в свойстве при установке двоичного значения - PullRequest
1 голос
/ 21 декабря 2010

У меня есть следующий метод, который дает мне исключение stackoverflow при установке значения.Я не могу войти в него и отладить его, приложение просто падает через несколько секунд.Вот код

public byte[] ImageTIFF
{
    get
    {
        try
        {
            string filePath = ImageTIFFDir + ImageId + ".TIFF";

            if (File.Exists(filePath))
            {
                return File.ReadAllBytes(ImageTIFFDir + ImageCollectionId + ".TIFF");
            }
            else
            {
                return null;        
            }
        }
        catch (Exception e)
        {
            Logger.log("Can't read TIFF image from file.", e);
            throw;
        }
    }
    set
    {
        try
        {
            ImageTIFF = value;
        }
        catch (Exception e)
        {
            Logger.log("Can't set image TIFF.", e);
            throw;
        }

    }
}

Он вызывается во время экспорта и не удается при первом вызове:

someImage.ImageTIFF = File.ReadAllBytes(imageName);

Ответы [ 4 ]

3 голосов
/ 21 декабря 2010

Это потому, что вы сами устанавливаете свойство в блоке установки

ImageTIFF = value;

сделать переменную массива byte[] и установить ее в блоке set и в блоке get, чтобы вернуть эту переменную.

3 голосов
/ 21 декабря 2010

Измените код на

private byte[] m_ImageTIFF;
public byte[] ImageTIFF 
{
  get{...}
  set { m_ImageTIFF = value;}
}

Вам необходим резервный магазин для имущества.

2 голосов
/ 21 декабря 2010

Вы устанавливаете значение свойства в пределах установки значения свойства ... рекурсия, мой друг:

ImageTIFF = value;

Вам потребуется создать еще одну переменную для отверстия value.Свойства не являются переменными, они просто оболочки.

2 голосов
/ 21 декабря 2010

Здесь вы пытаетесь установить значение для свойства, в котором вы уже находитесь.

try
{
    ImageTIFF = value;
}

Вы должны иметь члена класса за этим свойством.Что-то вроде

byte[] _imageTIFF

и установите его

set
{
    try
    {
        _imageTIFF = value;
    }
    catch (Exception e)
    {
        Logger.log("Can't set image TIFF.", e);
        throw;
    }
}
...