Partilhar via


Expressões em C# e F#

O avaliador da expressão gerenciado aceita a maioria das expressões escritas em C#.

O avaliador da expressão gerenciado não reconhece F# expressões, entretanto.Se você estiver depurando F#, você precisará traduzir expressões em sintaxe C# antes de inserir expressões em uma caixa de diálogo ou janela do depurador.Quando você traduzir expressões de F# para C#, não se esqueça que o C# usa o operador = = para testar igualdade, enquanto F# usa = único.

As seções a seguir oferecem informações específicas e discutem alguns dos tipos de expressão que não são suportados ou suporte parcial:

  • Casts

  • Dynamic Objects

  • Identifiers and Types

  • Method Evaluation

  • Operators

  • Overloaded Operators

  • Property Evaluation

  • Strings

  • typeof and sizeof Operators

  • WebMethods

  • O avaliador da expressão ignora public, protected, internal, e private modificadores de acesso.Você pode chamar um private método a partir de Watch janela, por exemplo.Como o avaliador da expressão ignora modificadores de acesso, é possível uma carga inesperada ser chamada.

O avaliador da expressão executa todas as avaliações em um contexto seguro implícito, se o código sendo executado é seguro ou não seguro.

O avaliador da expressão também ignora blocos marcados e a /checked opção de compilador.Todas as expressões são avaliadas em um contexto desmarcado.

Você pode personalizar a exibição dos tipos de dados personalizados usando atributos.Para obter mais informações, consulte Exibir tipos de dados personalizados.

Projeções

Expressões de conversão simples funcionam no depurador:

(A)x

Casts que envolvem ponteiros não funcionam no depurador.

Objetos dinâmicos

O avaliador da expressão pode avaliar as variáveis são tipificadas estaticamente como dinâmicos.Ele também pode avaliar os objetos que implementam a interface IDynamicObject.Quando os objetos que implementam a interface IDynamicObject são avaliados no Watch janela, um nó é adicionado no modo dinâmico.O nó de exibição dinâmica mostra membros de objeto, mas não permite editar os valores dos membros.

Os seguintes recursos de objetos dinâmicos não são suportados:

  • O + = operadores compostos,-=, % = / =, e * =

  • Muitas conversões, incluindo conversões numéricos e projeções de argumento de tipo

  • Chamadas de método com mais de dois argumentos

  • Getters de propriedade com mais de dois argumentos

  • Setters de propriedade com argumentos

  • Atribuindo a um indexador

  • Operadores booleanos && e||

Identificadores e tipos

Expressões de depurador podem usar qualquer identificador visível dentro do escopo atual.Se o depurador é interrompido no método Magh, por exemplo, você pode usar qualquer identificador visível dentro do Magh, incluindo constantes, nomes de variáveis e nomes de método.

O depurador corretamente pode exibir qualquer variável de primitivo, enum ou tipo intrínseco.Para variáveis do tipo de classe, o depurador corretamente exibe o valor com base no tipo mais derivado.Se você tiver um objeto leo do tipo Lion, derivado do tipo Cat, você pode avaliar leo.Claws e obter o valor correto para um objeto do tipo Lion.

Você pode atribuir um novo valor para qualquer expressão que é um valor de l.Isso inclui primitivo, classe, e System.Object tipos.

Método de avaliação

O depurador oferece suporte a avaliação de métodos, incluindo métodos sobrecarregados.Portanto, você pode inserir qualquer uma das expressões a seguir e o depurador chamará a versão correta dos métodos sobrecarregados:

Time.Set();
Time.Set(atime);

Na verdade avaliar um método no depurador chama e executa o código para o método.Se o método tem efeitos colaterais, avaliamos o método em uma janela de depurador alterará o estado de seu programa, que pode produzir resultados inesperados.

Quando você definir um ponto de interrupção em um método sobrecarregado, o local do ponto de interrupção depende como especificar o método.Se você especificar a assinatura completa (nome do método e lista de argumentos completa), o depurador define um ponto de interrupção na sobrecarga especificada.Se você especificar somente o nome do método, comportamento o depurador do depende de um Visual Studio opções de configuração.Se o IntelliSense de usar para verificar o nome de função caixa de seleção não estiver selecionada, o depurador definirá um ponto de interrupção em cada sobrecarga com esse nome do método.Caso contrário, o Choose Breakpoint caixa de diálogo será aberta, permitindo que você especifique qual sobrecarga (s) para colocar o ponto de interrupção.Para mais informações, consulte Como: definir um ponto de interrupção de função.

Não há suporte para a criação de novos métodos anônimos no depurador nesta versão do Visual Studio.

Operadores

O depurador corretamente avalia os operadores mais internos, incluindo:

  • Relational and equality operators: ( expr1> expr2, expr1< expr2, expr1<= expr2, expr1=> expr2, expr1== expr2, expr1!= expr2).

  • Boolean operators: (expr1&& expr2, expr1|| expr2, expr1? expr2: expr3).

  • Arithmetical operators: (expr1+ expr2,expr1- expr2, expr1* expr2, expr1/ expr2, expr1% expr2 ).

  • Logical operators: (expr1& expr2, expr1^ expr2, expr1| expr2 ).

  • Shift operators: (expr1>> expr2, expr1<< expr2 ).

  • Assignment operators: ( lvalue= expr2,lvalue*= expr2,lvalue/= expr2, lvalue%= expr2, lvalue+= expr2, lvalue-= expr2, lvalue<<= expr2, lvalue>>= expr2, lvalue&= expr2, lvalue^= expr2, lvalue|= expr2).

  • Unary operators: ( +expr1, - expr1, expr1++, ++expr1, expr1--, --expr1).

Operadores sobrecarregados

Mais operadores sobrecarregados funcionam no depurador.

Sobrecarga nos operadores fixos +, -, /, %, e & trabalho:

  • expr1+ expr2

  • expr1- expr2

  • expr1/ expr2

  • expr1% expr2

  • expr1& expr2

Sobrecarga nos operadores fixos =, & &, &, e | |, não funcionam:

  • expr1= expr2

  • expr1&& expr2

  • expr1& expr2

  • expr1|| expr2

Sobrecarga nos operadores fixos << e >> não funcionam se ambos os operandos são variáveis de classe:

  • objeto1 <<object2

  • Objeto1>> object2

Sobrecarregado operadores de prefixo +, -, + +, -,!, e ~ funcionam:

  • +expr1

  • -expr1

  • ++expr1

  • --expr1

  • !expr1

  • ~expr1

Sobrecarregado operadores de sufixo + + e --funcionam:

  • expr1++

  • expr1--

Indexadores de sobrecarga funcionam:

  • expr1[expr2]

Avaliação de propriedade

O depurador pode avaliar as propriedades em qualquer janela variável.No entanto, avaliar uma propriedade no depurador pode ter efeitos colaterais que produzem resultados inesperados e indesejados.Para proteger contra efeitos colaterais causados por avaliações acidentais, você pode desativar propriedade avaliação na Opções caixa de diálogo.

Cadeias de caracteres

O depurador reconhecerá o operador indexado quando ele é usado com seqüências, bem como matrizes.Assim, por exemplo, você pode inserir:

"hello world"[0]

O Watch janela exibirá o valor correto:

'h'

Em C#, diferentemente C/C++ nativo, você pode editar o valor de uma seqüência no depurador.Além disso, você pode usar o Length operador em uma seqüência:

mystring.Length 

-  ou  -

"hello world".Length

No C#, você pode concatenar seqüências:

"hello" + "world"

Operadores typeof e sizeof

O depurador oferece suporte a typeof e sizeof operador, transformando-o em equivalente .NET Framework função.

typeof ( expression)

é transformada em:

System.Type.GetType( expression)

O depurador depois avalia a expressão transformada.

O depurador oferece suporte a sizeof operador.

WebMethods

Você não é possível chamar WebMethods do depurador windows.

Consulte também

Outros recursos

Expressões no depurador

Referência de C#