Visual C# — przełomowe zmiany w Visual Studio 2012
W poniższej tabeli wymieniono zmiany w środowisku Visual C# w Visual Studio 2012 , który może uniemożliwić aplikacji, która została utworzona w Visual C# w Visual Studio 2010 kompilacji albo zmień zachowaniem takiej aplikacji w czasie wykonywania.
Kategoria |
Problem |
Opis |
---|---|---|
Wyrażenia lambda |
Można użyć zmiennej iteracji z foreach instrukcja w wyrażenie lambda, zawarte w treści pętli. |
Użycie foreach Zmienna iteracji w wyrażeniu lambda zagnieżdżone nie są już nie daje oczekiwanych wyników.W poniższym przykładzie użyto zmiennej word w wyrażeniu lambda.
|
Wyrażenia LINQ |
Można użyć zmiennej iteracji z foreach instrukcji w wyrażeniu LINQ, zawarte w treści pętli. |
Użycie foreach Zmienna iteracji w wyrażeniu LINQ nie daje oczekiwanych wyników.W poniższym przykładzie użyto zmiennej number w kwerendzie LINQ.
|
Nazwanych argumentów |
Skutków ubocznych argumenty nazwane i pozycyjne w wywołaniu metody teraz wystąpić od lewej do prawej, na liście argumentów. |
Skutków ubocznych argumenty nazwane i pozycyjne, które są łączone w wywołaniu metody są obecnie produkowana od lewej do prawej w wywołujący instrukcja listy argumentów.W poniższym przykładzie TestMethod nazywa się przy użyciu kombinacji argumentów nazwanych i pozycyjne w różnej kolejności.
|
Przeciążenia |
Ulepszono wiązaniem dla rozmowy z wykorzystaniem nazwanych argumentów do metody dostępu, które zawierają params parametry. |
W przypadku stwierdzenia więcej niż jednego kandydata rozdzielczość, wiązaniem woli najdokładniej pasuje typu dla nazwanych argumentów.Parametry, dla których argumenty nie są wymagane lub dostarczone do wywołania są uważane za tylko wtedy, kiedy są równie dobre dopasowania typu w przeciążenie kandydatów. W poniższym przykładzie string typu lepiej niż object dla p2.W związku z tym, wersja ExampleMethod w parametr, który p2 jest zdefiniowany jako ciąg powinien zostać wybrany, mimo że ma trzeciego params parametru.
|
Przeciążenia |
Ulepszone wiązaniem dla wywołań, gdzie algorytm musi wybierać między Func<object> parametr i Func parametr, który ma parametr innego typu (np. string lub int?) dla Func<dynamic> argument. |
W poniższym przykładzie wywołanie CandidateMethod , który wysyła Func<dynamic> argumentu po dwóch kandydatów, którzy rozdzielczość.Odpowiadającego mu parametru w jednym z kandydatów jest Func<object>, i odpowiadającego mu parametru w innych jest Func<string>. Kandydat przeciążenie, który ma Func<object> powinien zostać wybrany parametr, ponieważ object i dynamic są uważane za równoważne.W związku z tym, konwersję tożsamości istnieje nie tylko między dynamic i object , ale również między typami konstruowanej Func<dynamic> i Func<object>.
|
Zobacz też
Informacje
Wyrażenia lambda (Podręcznik programowania C#)
Koncepcje
Argumenty nazwane i opcjonalne (Podręcznik programowania C#)