Zásadní změny v jazyce Visual C# v sadě Visual Studio 2012
V následující tabulce jsou uvedeny změny v jazyce Visual C# v Visual Studio 2012 , by mohly bránit aplikaci, která byla vytvořena v jazyce Visual C# v aplikaci Visual Studio 2010 z kompilace nebo změnit chování běhu takové aplikace.
Kategorie |
Problém |
Description |
---|---|---|
Lambda výrazy |
Iterační proměnné lze použít foreach prohlášení v lambda výrazu, který je součástí těla smyčky. |
Použití foreach iterační proměnná v vnořené lambda výraz již poskytuje neočekávané výsledky.Následující příklad používá proměnné word v lambda výrazu.
|
Výrazy LINQ |
Iterační proměnné lze použít foreach prohlášení v LINQ výraz, který je součástí těla smyčky. |
Použití foreach iterační proměnná v LINQ výraz již poskytuje neočekávané výsledky.Následující příklad používá proměnné number v dotazu LINQ.
|
Pojmenované argumenty |
Vedlejší účinky z pozičních a pojmenovaných argumenty při volání metody nyní dojít zleva doprava, v seznamu argumentů. |
Vedlejší účinky z pozičních a pojmenovaných argumentů, které jsou kombinovány ve volání metody jsou nyní vyrábí zleva doprava v seznamu argumentů volání příkazu.V následujícím příkladu TestMethod je volána pomocí kombinaci pozičních a pojmenovaných argumentů v různém pořadí.
|
Rozlišení přetěžování |
Přetížení rozlišení bylo vylepšeno pro volání, které používají pojmenované argumenty přístup k metodám, které obsahují params parametry. |
Po nalezení více kandidátských řešení s pozdní vazbou upřednostňuje nejvíce odpovídá typu pro pojmenované argumenty.Parametry, u kterých nejsou argumenty požadované nebo ve výzvě k dispozici, jsou považovány za pouze pokud typ shody v přetížení kandidátů, stejně dobré. V následujícím příkladu string je lepší než typ object pro p2.Proto verze ExampleMethod ve kterém parametr p2 je definován jako řetězce by měly být zvoleny, přestože má třetí params parametr.
|
Rozlišení přetěžování |
Lepší rozlišení přetížení pro volání, kde musíte zvolit algoritmus Func<object> parametr a Func parametr, který má jiný typ parametru (např. v string nebo int?) pro Func<dynamic> argument. |
V následujícím příkladu volání CandidateMethod , odešle Func<dynamic> argument má dva kandidáty rozlišení.Odpovídající parametr v jednom z kandidátů je Func<object>, a odpovídající parametr v druhé je Func<string>. Přetížení kandidát, který má Func<object> parametr by měla být zvolena, protože object a dynamic jsou považovány za rovnocenné.Proto existuje převodu identity není pouze mezi dynamic a object , ale také mezi konstruované typy Func<dynamic> a Func<object>.
|
Viz také
Referenční dokumentace
Lambda výrazy (Příručka programování C#)
Koncepty
Pojmenované a volitelné argumenty (Příručka programování C#)