Вопрос

Я не уверен, что вызывает исключение StackOverflowException при попытке перезаписать функцию get и set. Когда я просто использую get по умолчанию, он работает.

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

Но когда я пытаюсь добавить дополнительные данные, возникает исключение StackOverflowException

public MyEnumType data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}

Есть идеи? Когда я делаю это для атрибутов управления пользователями asp .net, это не проблема. Мне интересно, почему это вызывает исключение StackOverflowException для обычного типа данных enum.

Это было полезно?

Решение

Да, у вас нет вспомогательного поля ... вот как вы должны это сделать:

 private MyEnumType data;

public MyEnumType Data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}

То, что происходит, это то, что вы ссылаетесь на свойство для возврата самого себя, это вызывает бесконечный цикл попыток доступа к его собственному значению. Следовательно, StackOverFlow.

В вашем случае, когда вы не добавляете никакой дополнительной логики в методы get и set, вы также можете использовать автоматическое свойство. Это просто определяется так:

public MyEnumType Data 
{
  get;
  set;
}

Другие советы

Вы ссылаетесь на само свойство внутри вашего метода получения и установки, что вызывает бесконечную рекурсию ( переполнение стека ). Это было бы более очевидно, если бы вы использовали стандартные соглашения об именах (Data).
Попробуйте что-то вроде:

private MyEnumType _data;

public MyEnumType Data 
{
  get { return _data; }
  set { _data = value; }
}
public class MyClass
{
    string propertyString;

    public string MyPropertyString
    {
        get
        {
            return propertyString;
        }
        set
        {
            propertyString = value;
        }
    }
}

Имя свойства должно отличаться от имени члена.

Поместите точку останова в установщик / получатель и отладьте ее, убедившись, что вы используете шаг в (F11), а не шаг - это должно помочь объяснить, что происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top