Expressões (guia de programação de C#)

Um expressão é uma seqüência de um ou mais operandos e zero ou mais operadores que podem ser avaliados como um único valor, objeto, método ou namespace. Expressões podem consistir em um valor literal, uma invocação de método, um operador e seus operandos, ou um nome simples. Nomes simples podem ser o nome de variável, membro de tipo, parâmetro do método, namespace ou tipo.

Expressões podem usar operadores que por sua vez, use outras expressões como parâmetros ou chamadas de método cujos parâmetros são por sua vez, outras chamadas de método, para que as expressões podem variar de simples muito complexa. A seguir estão dois exemplos de expressões:

((x < 10) && ( x > 5)) || ((x > 20) && (x < 25)) 
System.Convert.ToInt32("35")

Valores de expressão

Na maioria dos contextos em que as expressões são usadas, por exemplo, em instruções ou parâmetros de método, espera-se que a expressão avaliada como algum valor. Se x e y são inteiros, a expressão x + y for avaliada como um valor numérico. A expressão new MyClass() for avaliada como uma referência a uma nova instância de um MyClass objeto. A expressão myClass.ToString() for avaliada como uma seqüência de caracteres, porque esse é o tipo de retorno do método. No entanto, embora o nome do namespace é classificado como uma expressão, não é avaliada como um valor e, portanto, nunca pode ser o resultado final de qualquer expressão. Você não pode passar o nome do namespace para um parâmetro de método, usá-lo em uma nova expressão ou atribuí-la a uma variável. Você só pode usá-lo como uma subexpressão em uma expressão maior. O mesmo é verdadeiro para tipos (diferentes de System.Type objetos), nomes de grupo de método (diferentes de métodos específicos) e o evento Adicionar e Remover acessadores.

Cada valor possui um tipo associado. Por exemplo, se x e y são as duas variáveis do tipo int, o valor da expressão x + y também é digitado como int. Se o valor é atribuído a uma variável de um tipo diferente, ou se x e y são tipos diferentes, as regras de conversão de tipo são aplicadas. Para obter mais informações sobre o funcionam de tais conversões, consulte Elenco e conversões de Tipo (guia de programação de C#).

Estouros

Expressões numéricas podem causar estouros se o valor for maior que o valor máximo do tipo do valor. Para obter mais informações, consulte Selecionado e desmarcada (C# referência) e Explicit Numeric Conversions Table (C# Reference).

Precedência e associatividade

A maneira na qual uma expressão é avaliada é regida pelas regras de precedência do operador e associatividade de operadores. Para obter mais informações, consulte Operadores (guia de programação de C#).

A maioria das expressões, exceto as expressões de atribuição e expressões de invocação de método, devem ser incorporadas em uma instrução. Para obter mais informações, consulte Instruções (guia de programação de C#).

Literais e nomes simples

Os dois tipos mais simples de expressões são literais e nomes simples. Um literal é um valor constante, não tem nome. Por exemplo, no exemplo de código a seguir, ambos 5 e "Hello World" são valores literais:

// Expression statements.
int i = 5;
string s = "Hello World";

Para obter mais informações sobre literais, consulte Types (C# Reference).

No exemplo anterior, ambos i e s são nomes simples, que identificam as variáveis locais. Quando essas variáveis são usadas em uma expressão, o nome da variável avalia o valor armazenado no local da variável na memória. Isso é mostrado no exemplo a seguir:

int num = 5;
System.Console.WriteLine(num); // Output: 5
num = 6;
System.Console.WriteLine(num); // Output: 6            

Expressões de invocação

No seguinte exemplo de código, a chamada para DoWork é uma expressão de chamada.

DoWork();

A invocação de método requer o nome do método, como um nome como no exemplo anterior, ou como resultado de outra expressão, seguido de parênteses e quaisquer parâmetros de método. Para obter mais informações, consulte Methods (C# Programming Guide). A invocação de delegado usa o nome dos parâmetros de método e o delegado entre parênteses. Para obter mais informações, consulte Delegates (C# Programming Guide). Chamadas de método e invocações de delegado retornam o valor de retorno do método, se o método retorna um valor. Métodos que retornam void não podem ser usados no lugar de um valor em uma expressão.

Expressões de consulta

Em geral, as mesmas regras para expressões aplicam a expressões de consulta. Para obter mais informações, consulte LINQ Expressões de consulta (guia de programação de C#).

Expressões Lambda

As expressões lambda representam "métodos de inline" que não tenha nenhum nome, mas pode ter a entrada parâmetros e várias instruções. Elas são amplamente usadas em LINQ para passar argumentos para métodos. As expressões lambda são compiladas para delegados ou árvores de expressão, dependendo do contexto em que são usados. Para obter mais informações, consulte Expressões lambda (guia de programação de C#).

Árvores de Expressão

Árvores de expressão ativar expressões para ser representado como estruturas de dados. Elas são amplamente usadas pelos provedores LINQ para traduzir expressões de consulta em código que seja significativo em outro contexto, como, por exemplo, um banco de dados SQL. Para obter mais informações, consulte Árvores de expressão (C# e Visual Basic).

Comentários

Sempre que uma variável, a propriedade do objeto ou o acesso do indexador de objeto é identificado de uma expressão, o valor do item é usado como o valor da expressão. Uma expressão pode ser colocada em qualquer lugar no C#, onde um valor ou objeto é necessário, contanto que a expressão é avaliada, por fim, para o tipo necessário.

Consulte também

Referência

Methods (C# Programming Guide)

Delegates (C# Programming Guide)

Operadores (guia de programação de C#)

Tipos (guia de programação de C#)

Conceitos

C# Programming Guide

LINQ Expressões de consulta (guia de programação de C#)