Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
Use o System.Collections.IDictionary objeto retornado pela Data propriedade para armazenar e recuperar informações complementares relevantes para a exceção. As informações estão na forma de um número arbitrário de pares chave/valor definidos pelo usuário. O componente chave de cada par chave/valor normalmente é uma cadeia de caracteres de identificação, enquanto o componente de valor do par pode ser qualquer tipo de objeto.
Segurança do par chave/valor
Os pares chave/valor armazenados na coleção retornada pela Data propriedade não são seguros. Se o aplicativo chamar uma série aninhada de rotinas e cada rotina contiver manipuladores de exceção, a pilha de chamadas resultante conterá uma hierarquia desses manipuladores de exceção. Se uma rotina de nível inferior gerar uma exceção, qualquer manipulador de exceção de nível superior na hierarquia de pilha de chamadas poderá ler e/ou modificar os pares chave/valor armazenados na coleção por qualquer outro manipulador de exceção. Isso significa que você deve garantir que as informações nos pares chave/valor não sejam confidenciais e que seu aplicativo funcionará corretamente se as informações nos pares chave/valor estiverem corrompidas.
Principais conflitos
Um conflito de chave ocorre quando diferentes manipuladores de exceção especificam a mesma chave para acessar um par chave/valor. Tenha cuidado ao desenvolver seu aplicativo porque a consequência de um conflito de chave é que os manipuladores de exceção de nível inferior podem se comunicar inadvertidamente com manipuladores de exceção de nível superior, e essa comunicação pode causar erros sutis de programa. No entanto, se você for cauteloso, poderá usar os principais conflitos para aprimorar seu aplicativo.
Evitar conflitos principais
Evite conflitos de chave adotando uma convenção de nomenclatura para gerar chaves exclusivas para pares chave/valor. Por exemplo, uma convenção de nomenclatura pode produzir uma chave que consiste no nome delimitado por período de seu aplicativo, o método que fornece informações complementares para o par e um identificador exclusivo.
Suponha que dois aplicativos, chamados Produtos e Fornecedores, cada um tenha um método chamado Sales. O método Vendas no aplicativo Produtos fornece o número de identificação (a unidade de manutenção de estoque ou SKU) de um produto. O método Vendas no aplicativo Fornecedores fornece o número de identificação, ou SID, de um fornecedor. Consequentemente, a convenção de nomenclatura para este exemplo produz as chaves "Products.Sales.SKU" e "Suppliers.Sales.SID".
Aproveitar conflitos chave
Explore conflitos chave utilizando a presença de uma ou mais chaves especiais e pré-arranjadas para controlar o processamento. Suponha que, em um cenário, o manipulador de exceção de nível mais alto na hierarquia de pilha de chamadas capture todas as exceções geradas por manipuladores de exceção de nível inferior. Se existir um par chave/valor com uma chave especial, o manipulador de exceção de alto nível formata os pares chave/valor restantes no IDictionary objeto de alguma forma diferente do padrão; caso contrário, os pares chave/valor restantes serão formatados de alguma maneira normal.
Agora suponha que, em outro cenário, o manipulador de exceção em cada nível da hierarquia de pilha de chamadas capture a exceção gerada pelo próximo manipulador de exceção de nível inferior. Além disso, cada manipulador de exceção sabe que a coleção retornada pela propriedade Data contém um conjunto de pares chave/valor que podem ser acessados com um conjunto pré-determinado de chaves.
Cada manipulador de exceção usa o conjunto pré-arranjado de chaves para atualizar o componente de valor do par chave/valor correspondente com informações exclusivas para esse manipulador de exceção. Depois que o processo de atualização é concluído, o manipulador de exceção lança a exceção para o próximo manipulador de exceção de nível superior. Por fim, o manipulador de exceção de nível mais alto acessa os pares chave/valor e exibe as informações de atualização consolidadas de todos os manipuladores de exceção de nível inferior.