Alterações significativas do Visual C# no Visual Studio 2012
A tabela a seguir lista alterações no Visual c# em Visual Studio 2012 qualquer um que pode evitar um aplicativo que foi criado em Visual c# no Visual Studio 2010 de compilação ou alterar o comportamento de tempo de execução de um aplicativo.
Categoria |
Problema |
Descrição |
---|---|---|
Expressões Lambda |
Você pode usar a variável de iteração de uma instrução de foreach em uma expressão lambda que está contida no corpo do loop. |
O uso de uma variável de iteração de foreach em uma expressão lambda aninhada não produz resultados inesperados.O exemplo a seguir usa word variável em uma expressão lambda.
|
Expressões LINQ |
Você pode usar a variável de iteração de uma instrução de foreach em uma expressão LINQ que está contida no corpo do loop. |
O uso de uma variável de iteração de foreach em uma expressão LINQ não produz resultados inesperados.O exemplo a seguir usa number variável em uma consulta LINQ.
|
Argumentos nomeados |
Os efeitos colaterais dos argumentos nomeados e posicionais em um chamada de método ocorrem agora da esquerda para a direita na lista de argumentos. |
Os efeitos colaterais dos argumentos nomeados e posicionais que são combinados em uma chamada de método são gerados agora da esquerda para a direita na lista de argumentos de instrução de chamada.No exemplo a seguir, TestMethod é chamado usando uma combinação de argumentos nomeados e posicionais pedidos em diferentes.
|
Resolução de sobrecarga |
Resolução de sobrecarga foi aprimorada para chamadas que usam argumentos nomeados para acessar os métodos que contêm parâmetros de params . |
Quando mais de um candidato de resolução é encontrado, a resolução de sobrecarga preferir a maioria de correspondência de tipo específico para argumentos nomeados.Os parâmetros para os argumentos não são necessários ou não são fornecidos na chamada são considerados somente quando as correspondências de tipo em candidatas a sobrecarga são igualmente boas. No exemplo a seguir, string é um tipo melhor do que object para p2.Portanto, a versão de ExampleMethod em que o parâmetro p2 é definido como uma cadeia de caracteres deve ser escolhida, mesmo que tem um parâmetro de params do terceiro.
|
Resolução de sobrecarga |
Resolução de sobrecarregamento é aprimorada para chamadas onde o algoritmo deve escolher entre um parâmetro de Func<object> e um parâmetro de Func que tem um parâmetro de tipo diferente (por exemplo, string ou int?) para um argumento de Func<dynamic> . |
No exemplo a seguir, a chamada a CandidateMethod que envia um argumento de Func<dynamic> tem dois candidatos de resolução.O parâmetro correspondente em um dos candidatos é Func<object>, e o parâmetro correspondente no outro é Func<string>. O candidato do sobrecarregamento que tem um parâmetro de Func<object> deve ser escolhido como object e dynamic são considerados equivalentes.Portanto, uma conversão de identidade não existe somente entre dynamic e object mas também entre tipos construídos Func<dynamic> e Func<object>.
|
Consulte também
Referência
Expressões lambda (guia de programação do C#)
Conceitos
Argumentos nomeados e opcionais (guia de programação do C#)