Критические изменения Visual C# в Visual Studio 2012
В следующей таблице перечислены изменения в Visual C# - # в Visual Studio 2012, то может предотвратить приложение, созданное в C Visual C-# в Visual Studio 2010 из компилировать или изменить расширение функциональности времени выполнения такого приложения.
Категория |
Проблема |
Описание |
---|---|---|
Лямбда-выражения |
Можно использовать переменную итерации выписки foreach в лямбда-выражении, содержится в теле цикла. |
Использование переменной итерации foreach в лямбда-выражении вложенных больше не дают непредвиденные.В следующем примере используется переменная word в лямбда-выражении.
|
Выражения LINQ |
Можно использовать переменную итерации выписки foreach в выражении LINQ, содержащегося в теле цикла. |
Использование переменной итерации foreach в выражении LINQ больше не дают непредвиденные.В следующем примере используется переменная number в запросе LINQ.
|
Именованные аргументы |
Побочные эффекты именованное и позиционные аргументы в вызове метода теперь выполняются слева направо в списке аргументов. |
Побочные эффекты именованное и позиционных аргументов, объединенные в вызове метода теперь создаются слева направо в списке аргументов при вызове выписки.В следующем примере вызывается метод TestMethod, с помощью сочетания из элементов и позиционных аргументов в различных порядках.
|
Разрешение перегруженных версий |
Разрешение перегруженных версий, улучшено для вызовов, которые используют именованные аргументы к методам, содержащие параметры params. |
Если несколько является разрешения найден, разрешение перегруженных версий предпочитает наиболее точное соответствие типов для именованных аргументов.Параметры, для которых требуются аргументы или не предоставляются в вызове рассматриваются только при совпадении типов в кандидатах перегруженной, одинаково хорошо подходят. В следующем примере string является более эффективным, чем тип object для p2.Таким образом, версия ExampleMethod, в которой параметр p2 определен как строка должна быть выбрана, даже если она имеет параметр params третий.
|
Разрешение перегруженных версий |
Разрешение перегруженных версий улучшено для вызовов, алгоритм должен выбрать между параметром Func<object> и параметром Func, имеющим значение другого типа (например, string или int?) для аргумента Func<dynamic>. |
В следующем примере, вызов метода CandidateMethod, который отправляет аргумент Func<dynamic> содержит 2 кандидата разрешения.Соответствующий параметр в одном из кандидатов Func<object> и соответствующий параметр Func<string> в другом. Является перегруженной, имеющий параметр Func<object> должен быть выбран, поскольку предполагается, что object и dynamic будут эквивалентны.Поэтому преобразование идентификаторов не существует только между dynamic и object, но также сконструированными между типами Func<dynamic> и Func<object>.
|
См. также
Ссылки
Лямбда-выражения (Руководство по программированию в C#)
Основные понятия
Именованные и необязательные аргументы (Руководство по программированию на C#)