Возможности C # .NET 3.0 / 3.5 в 2.0 с использованием Visual Studio 2008 - PullRequest
13 голосов
/ 06 октября 2008

Каковы некоторые из новых функций, которые можно использовать в .NET 2.0, которые относятся к C # 3.0 / 3.5 после обновления до Visual Studio 2008? Кроме того, какие функции недоступны?

Доступно

  • Лямбда
  • Методы расширения (путем объявления пустого System.Runtime.CompilerServices.ExtensionAttribute)
  • Автоматические свойства
  • Инициализаторы объектов
  • Инициализаторы коллекции
  • LINQ to Objects (реализуя методы расширения IEnumerable, см. LinqBridge )

Нет в наличии

  • Выражение деревьев
  • Библиотеки WPF / Silverlight

Ответы [ 7 ]

16 голосов
/ 06 октября 2008

Вы можете использовать любую новую функцию C # 3.0, которая обрабатывается компилятором путем создания 2.0-совместимого IL и не ссылается ни на одну из новых сборок 3.5:

  • Лямбда (используется как Func<..>, а не Expression<Func<..>>)
  • Методы расширения (путем объявления пустого System.Runtime.CompilerServices.ExtensionAttribute)
  • Автоматические свойства
  • Инициализаторы объектов
  • Инициализаторы коллекции
  • LINQ to Objects (реализуя методы расширения IEnumerable , см. LinqBridge )
5 голосов
/ 06 октября 2008

Я освещаю это в статье на моем сайте .

Почти все функции C # 3.0 доступны при нацеливании на .NET 2.0. Для методов расширения вам нужно определить дополнительный атрибут. Деревья выражений вообще недоступны. Поддержка выражений запросов основана на переводе, которому следуют «нормальные» правила C #, поэтому вам нужно что-то для обеспечения методов Select, Where и т. Д. LINQBridge является де-факто стандартной реализацией "LINQ to Objects в .NET 2.0". Вы можете захотеть объявить делегатов в семействах делегатов Func и Action, чтобы упростить работу с лямбда-выражениями, а затем удалить их, если / когда вы перейдете на .NET 3.5

5 голосов
/ 06 октября 2008

Почти все! Даниэль Мот покрывает это здесь и здесь . Это оставляет только поддержку времени выполнения: LINQ-to-Objects предоставляется LINQBridge - который оставляет только большие API, такие как поддержка Expression, и инструменты, такие как LINQ-to-SQL. Они слишком велики, чтобы их можно было разумно перенести на .NET 2.0, поэтому я бы использовал .NET 3.5 для них.

3 голосов
/ 06 октября 2008

Чтобы определить методы расширения, вам нужно предоставить следующий класс, если вы ориентируетесь на .NET 2.0:

namespace System.Runtime.CompilerServices {
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
    sealed class ExtensionAttribute : Attribute { }
}
2 голосов
/ 18 марта 2009

Вы можете использовать Mono версию System.Core, которая полностью поддерживает LINQ & Expression Trees. Я скомпилировал его исходный код для .net 2.0, и теперь я могу использовать его в своих проектах .net2.0. Это отлично подходит для проектов, которые необходимо развернуть на win2k, где недоступен .net3.5.

2 голосов
/ 06 октября 2008

Ранее было что-то похожее, что вы тоже можете прочитать:

Таргетинг .NET Framework 3.5, использование среды выполнения .NET 2.0. Предостережения?

1 голос
/ 06 октября 2008

Методы Lambdas & Extension обрабатываются исключительно компилятором и могут использоваться с платформой .Net 2.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...