#c# #asp.net
#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; }
}
Исключение генерируется в блоке Try, когда код пытается получить доступ к свойству JobFileNames класса JobQuote.
Ответ №1:
Получатель и установщик JobFileNames
свойства ссылаются на самих себя, вызывая бесконечный цикл. Когда этот цикл исчерпывает доступное пространство стека, вы получаете StackOverflowException
.
Вероятно, вам нужно какое-то резервное поле для свойства. Либо явное…
private List<string> _jobFileNames;
public List<string> JobFileNames
{
get { return _jobFileNames; }
set { _jobFileNames = value; }
}
…или, что еще лучше, автоматически реализованный…
public List<string> JobFileNames { get; set; }
Ответ №2:
Ваше JobFileNames
свойство возвращается само.
Вам нужно создать резервное поле и вернуть его или использовать автоматически сгенерированное свойство.
Ответ №3:
In JobQuote.cs
JobFileNames
ссылается на себя.
Вы бесконечно повторяете свойство.
Вместо этого используйте автоматически реализованные свойства:
public List<string> JobFileNames { get; set;}