我有以下方法,它在设置值时给出了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);
答案 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
创建另一个变量。属性不是变量,它们只是包装器。