Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Exception.Data Propriedade

Obtém uma coleção de pares chave/valor que fornecem informações adicionais, definido pelo usuário sobre a exceção.

Namespace:  System
Assembly:  mscorlib (em mscorlib. dll)

public virtual IDictionary Data { get; }

Valor da propriedade

Tipo: System.Collections.IDictionary
An object that implements the System.Collections.IDictionary interface and contains a collection of user-defined key/value pairs.O padrão é uma coleção vazia.

Use the System.Collections.IDictionary object returned by the Data property to store and retrieve supplementary information relevant to the exception.The inFormulárioation is in the Formulário of an arbitrary número of chave User-defined/pairs valor.The of each /is par valor Identifying an Cadeia de Caracteres, whereas the valor of the par can be any of .

Segurança par chave/valor

The key/value pairs stored in the collection returned by the Data property are not secure.Se seu aplicativo chama uma série aninhada de rotinas, e cada rotina contém manipuladores de exceção, a pilha de chamadas resultante contém uma hierarquia desses manipuladores de exceção.If a lower-nível Routine throws an exceção, ANY upper-nível manipulador de exceção in the hierarquia pilha de chamadas can ler and/or modify the chave/valor pairs stored in the coleção by any Outro manipulador de exceção.Isso significa que você deve garantir que as informações nos pares chave/valor não são confidenciais e que seu aplicativo funcionará corretamente se as informações de pares chave/valor estiver corrompidas.

Conflitos de Chave

Ocorre um conflito de chave quando manipuladores de exceção diferentes especificar a mesma chave para acessar um par chave/valor.Tome cuidado ao desenvolvimento de seu aplicativo porque a conseqüência de um conflito de chave é que os manipuladores de exceção de nível inferior inadvertidamente podem se comunicar com manipuladores de exceção de nível superior, e essa comunicação pode causar erros de programa sutis.No entanto, se você estiver CUIDADO Você pode usar os conflitos de chave para aprimorar seu aplicativo.

Evitando conflitos de chave

Evitar conflitos adotando um convenção de nomenclatura para gerar chave Exclusivo chaves para chave/valor pares.Por exemplo, uma convenção de nomeação pode produzir uma chave que consiste no nome período-delimitado do seu aplicativo, o método que fornece informações suplementares para o par e um identificador exclusivo.

Suponha que dois aplicativos, denominados Produtos e Fornecedores, cada tem um método chamado de vendas.O método de vendas no aplicativo produtos fornece o número de identificação (o unidade ou SKU manutenção em estoque) de um produto.O método de vendas no aplicativo fornecedores fornece o número de identificação, ou SID, de um fornecedor.Consequently, yields the convenção de nomenclatura for this exemplo the Teclas, "Products.Sales.SKU" and "Suppliers.Sales.SID".

Explorando Conflitos de Chave

Chave exploit Conflicts by Using the Presence of one or more Especial, prearranged Keys to controle processamento.Suppose, in one cenário, the Mais alto nível manipulador de exceção in the hierarquia pilha de chamadas catches all Exceptions thrown by lower-nível handlers exceção.If a key/value pair with a special key exists, the high-level exception handler formats the remaining key/value pairs in the IDictionary object in some nonstandard way; otherwise, the remaining key/value pairs are formatted in some normal manner.

Agora suponha que, em outro cenário, o manipulador de exceção em cada nível do pilha de chamadas hierarquia captura a exceção acionada pela Avançar inferior-nível manipulador de exceção.In addition, each exception handler knows the collection returned by the Data property contains a set of key/value pairs that can be accessed with a prearranged set of keys.

Each uses the set prearranged of Keys to Atualizar the valor of the /valor par with to that.After the Atualizar is processo completo, the manipulador de exceção throws the exceção to the próximo manipulador de exceção higher-level.Finally, the nível highest manipulador de exceção accesses the chave/valor pairs and displays the Consolidated Atualizar informações from All the lower-nível handlers exceção.

ObservaçãoObservação:

The ExecutionEngineException, OutOfMemoryException, StackOverflowException and ThreadAbortException classes always return null for the value of the Data property.

The following example demonstrates how to add and retrieve information using the Data property.

// This example demonstrates the Exception.Data property.
using System;
using System.Collections;

class Sample 
    {
    public static void Main()
        {
        Console.WriteLine();
        Console.WriteLine("Exception with some extra information...");
        RunTest(false);
        Console.WriteLine();
        Console.WriteLine("Exception with all extra information...");
        RunTest(true);
        }
    public static void RunTest(bool displayDetails)
        {
        try
            {
            NestedRoutine1(displayDetails);
            }
        catch (Exception e)
            {
            Console.WriteLine("An exception was thrown.");
            Console.WriteLine(e.Message);
            if (e.Data != null)
                {
                Console.WriteLine("  Extra details:");
                foreach (DictionaryEntry de in e.Data)
                Console.WriteLine("    The key is '{0}' and the value is: {1}", 
                                                    de.Key, de.Value);
                }
            }
        }
    public static void NestedRoutine1(bool displayDetails)
        {
        try
            {
            NestedRoutine2(displayDetails);
            }
        catch (Exception e)
            {
            e.Data["ExtraInfo"] = "Information from NestedRoutine1.";
            e.Data.Add("MoreExtraInfo", "More information from NestedRoutine1.");
            throw e;
            }
        }
    public static void NestedRoutine2(bool displayDetails)
        {
        Exception e = new Exception("This statement is the original exception message.");
        if (displayDetails)
            {
            string s = "Information from NestedRoutine2.";
            int i = -903;
            DateTime dt = DateTime.Now;
            e.Data.Add("stringInfo", s);
            e.Data["IntInfo"] = i;
            e.Data["DateTimeInfo"] = dt;
            }
        throw e;
        }
    }
/*
This example produces the following results:

Exception with some extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.

Exception with all extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'stringInfo' and the value is: Information from NestedRoutine2.
    The key is 'IntInfo' and the value is: -903
    The key is 'DateTimeInfo' and the value is: 11/26/2002 2:12:58 PM
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from NestedRoutine1.
*/


// This example demonstrates the Exception.Data property.
import System.*;
import System.Collections.*;

class Sample
{
    public static void main(String[] args)
    {
        Console.WriteLine();
        Console.WriteLine("Exception with some extra information...");
        RunTest(false);
        Console.WriteLine();
        Console.WriteLine("Exception with all extra information...");
        RunTest(true);
    } //main

    public static void RunTest(boolean displayDetails)
    {
        try {
            NestedRoutine1(displayDetails);
        }
        catch (System.Exception e) {
            Console.WriteLine("An exception was thrown.");
            Console.WriteLine(e.get_Message());
            if (e.get_Data() != null) {
                Console.WriteLine("  Extra details:");
                DictionaryEntry de; 
                IEnumerator enumObj = e.get_Data().GetEnumerator();
                while (enumObj.MoveNext()) {
                    de = (DictionaryEntry)enumObj.get_Current();
                    Console.WriteLine("    The key is '{0}' and the value " 
                        + "is: {1}", de.get_Key(), de.get_Value());
                }
            }
        }
    } //RunTest

    public static void NestedRoutine1(boolean displayDetails) 
        throws System.Exception 
    {
        try {
            NestedRoutine2(displayDetails);
        }
        catch (System.Exception e) {
            e.get_Data().set_Item("ExtraInfo",
                "Information from NestedRoutine1.");
            e.get_Data().Add("MoreExtraInfo",
                "More information from NestedRoutine1.");
            throw e;
        }
    } //NestedRoutine1

    public static void NestedRoutine2(boolean displayDetails) 
        throws System.Exception 
    {
        System.Exception e = new Exception("This statement is the original "
            + "exception message.");

        if (displayDetails) {
            String s = "Information from NestedRoutine2.";
            int i = -903;
            DateTime dt = DateTime.get_Now();
            e.get_Data().Add("stringInfo", s);
            e.get_Data().set_Item("IntInfo", (Int32)i);
            e.get_Data().set_Item("DateTimeInfo", dt);
        }
        throw e;
    } //NestedRoutine2
} //Sample
/*
This example produces the following results:

Exception with some extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from 
    NestedRoutine1.

Exception with all extra information...
An exception was thrown.
This statement is the original exception message.
  Extra details:
    The key is 'stringInfo' and the value is: Information from NestedRoutine2.
    The key is 'IntInfo' and the value is: -903
    The key is 'DateTimeInfo' and the value is: 11/26/2002 2:12:58 PM
    The key is 'ExtraInfo' and the value is: Information from NestedRoutine1.
    The key is 'MoreExtraInfo' and the value is: More information from 
    NestedRoutine1.
*/


Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft