Pergunta

Eu tenho um conjunto de propriedades públicas na minha forma de tipo ListE<T> onde:

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

Sim, é um bocado, mas é o que o Designer requer para que ele mostrar-se como uma coleção editável na janela Propriedades. Que ele faz! Então, eu clicar no pequeno botão [..] para editar a coleção e, em seguida, clique em Adicionar para adicionar um item à coleção.

Operação aritmética resultou em um estouro.

Agora, esta é uma lista muito básico, pouco mais de uma variedade crescente. A única parte que chega perto de aritmética em toda a coisa é na função de expandir, e mesmo que usa um desvio à esquerda em vez de uma multiplicação, de modo que não irá transbordar. Isso tudo me faz pensar que essa exceção está sendo levantada no interior do Designer, talvez causada por uma pequena desatenção aos detalhes de implementação da minha parte, mas eu não consigo encontrar uma maneira de teste ou depuração esse cenário. Alguém tem alguma idéias inteligentes?

EDIT: Sim, eu posso usar a propriedade com sucesso, bem, mesmo manualmente, ie. no manipulador OnLoad, e eu suponho que é o que eu vou ter que recorrer a se eu não posso começar este trabalho, mas isso não seria o ideal. : (

Foi útil?

Solução

Eu não consigo entender o que está motivando você a tentar reinventar a List roda dessa forma, mas para responder à sua pergunta: Gostaria de acrescentar uma linha "System.Diagnostics.Debugger.Break ()" para o construtor de sua classe.

Em seguida, tente usá-lo no designer, e você vai ter um pop-up perguntando se você deseja anexar um depurador. Anexar uma segunda instância do Visual Studio como um depurador, e você vai ser capaz de definir alguns pontos de interrupção em seu código e iniciar a depuração.

Outras dicas

Um lugar para começar seria a de que ele pode estar fazendo a matemática com sua propriedade ListE`1 :: Count. Se isso tem alguma falha sutil (ou seja, é mais complicado do que this.innerList.Count retorno) que poderia estar causando o designer para estouro aritmético em alguma operação. Normalmente transborda aritméticas não ocorrem a menos que solicitado especificamente para usar o

checked
{
   // ...
}

sintaxe.

Você não tem que adicionar o Debugger.Break (); chamar ao seu código de depurá-lo. Você pode simplesmente abrir uma instância diferente do VS e anexar o que você usá-lo em e você deve ser capaz de depurá-lo sem problemas (apenas certifique-se de que você tem os símbolos carregados).

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