尝试从属性中检索通用列表时发生StackOverflowException

时间:2011-11-02 23:06:32

标签: c# asp.net

UserControl中的属性:

     public JobQuote quote
{
    get 
    {
        if (ViewState["Quote"] != null)
            return (JobQuote)ViewState["Quote"];
        else
        {
            JobQuote newQuote = new JobQuote();
            return newQuote;
        }   
    }
    set { ViewState["Quote"] = value; }
}

在UserControl中运行代码:

protected void button_UploadFile_Click(object sender, EventArgs e)
{
    if (FileUploader.HasFile)
    {
        try
        {
            quote.JobFileNames.Add(System.IO.Path.GetFileName(FileUploader.FileName));
        }
        catch (Exception ex)
        {
            label_UploadStatus.Text = "Upload status: The file could not be uploaded.  <br />The following error occurred: " + ex.Message;
        }
    }
}
来自JobQuote.cs类的

属性:

public List<string> JobFileNames
{
    get 
    {
            return JobFileNames;
    }
    set { JobFileNames = value; }
}

当代码尝试访问JobQuote类的JobFileNames属性时,Try块中会抛出异常。

3 个答案:

答案 0 :(得分:1)

JobFileNames属性的getter和setter正在引用它们,导致无限循环。当该循环耗尽可用的堆栈空间时,您将获得StackOverflowException

您可能需要某种属性的支持字段。要么明确......

private List<string> _jobFileNames;
public List<string> JobFileNames
{
    get { return _jobFileNames; }
    set { _jobFileNames = value; }
}

...或者,更好的是,自动实施......

public List<string> JobFileNames { get; set; }

答案 1 :(得分:0)

您的JobFileNames财产正在归还。
您需要创建一个支持字段并返回该字段,或使用自动生成的属性。

答案 2 :(得分:0)

JobQuote.cs中,JobFileNames指的是自己。

您无限期地对该属性进行递归。

改为使用auto-implemented properties

public List<string> JobFileNames { get; set;}