Pergunta

Eu não sei o que está causando o StackOverflowException quando eu tentar substituir um get e função set. Quando eu apenas usar o get padrão e configurá-lo funciona.

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

Mas quando eu tento adicionar dados adicionais, ele lança um StackOverflowException

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

Todas as idéias? Quando eu fizer isso para asp .net atributos controle do usuário, não há problema. Eu estou querendo saber por que ele está causando um StackOverflowException para um tipo de dados de enumeração normal.

Foi útil?

Solução

Sim, você não tem um campo de apoio ... é assim que você deve fazê-lo:

 private MyEnumType data;

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

O que acontece é que você está se referindo a propriedade para si retornar, isso faz com que um loop infinito de tentar acessar o seu próprio valor. Assim, StackOverFlow.

No seu caso quando você não adicionar qualquer lógica adicional no obter e definir métodos que você poderia usar uma propriedade automática também. Este é simplesmente definido assim:

public MyEnumType Data 
{
  get;
  set;
}

Outras dicas

Você está fazendo referência a propriedade em si dentro do seu getter e setter, que faz com que recursão infinita ( estouro de pilha ). Teria sido mais evidente se você tivesse usado as convenções de nomenclatura padrão (dados).
Tente algo como:

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;
        }
    }
}

O nome da propriedade deve ser diferente do nome do membro.

Coloque um ponto de interrupção dentro do setter / getter e depurar, certificando-se de que você use passo para (F11) não passar por cima -. Isso deve ajudar a explicar o que está acontecendo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top