设置二进制值时属性中的异常

时间:2010-12-21 10:40:41

标签: c# stack-overflow

我有以下方法,它在设置值时给出了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 个答案:

答案 0 :(得分:3)

将代码更改为

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

您需要为该物业提供后备商店。

答案 1 :(得分:3)

这是因为,您在设置块中设置属性本身

ImageTIFF = value;

创建一个byte[]数组变量并在set block中设置并在get块中返回此变量。

答案 2 :(得分:2)

在这里,您尝试将值设置为您已经在的属性。

try
{
    ImageTIFF = value;
}

您需要在该属性后面拥有类成员。像

这样的东西
byte[] _imageTIFF

并设置

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

答案 3 :(得分:2)

您在设置属性值时设置了Property的值...递归,我的朋友:

ImageTIFF = value;

您需要为洞value创建另一个变量。属性不是变量,它们只是包装器。