2008-10-06 4 views
13

Quelles sont les nouvelles fonctionnalités pouvant être utilisées dans .NET 2.0 qui sont spécifiques à C# 3.0/3.5 après la mise à niveau vers Visual Studio 2008? Aussi, quelles sont certaines des fonctionnalités qui ne sont pas disponibles?Fonctionnalités C# .NET 3.0/3.5 dans 2.0 utilisant Visual Studio 2008

disponibles

  • lambdas
  • Méthodes d'extension (en déclarant un System.Runtime.CompilerServices.ExtensionAttribute vide)
  • Propriétés automatiques
  • objet de Initialiseur
  • Collection Initialiseur
  • LINQ to Objects (en implémentant IE dénombrables méthodes d'extension, voir LinqBridge)

Non disponible

  • arbres d'expression
  • WPF/Silverlight Bibliothèques
+0

Les arbres d'expression sont disponibles via l'utilisation de Mono. Voir ma réponse ci-dessous. –

Répondre

16

Vous pouvez utiliser une nouvelle fonctionnalité C# 3.0 qui est géré par le compilateur en émettant IL 2,0-compatible et ne fait référence à aucune des nouveaux ensembles de 3,5:

  • lambdas (utilisé comme Func<..>, et non Expression<Func<..>> )
  • les méthodes d'extension (en déclarant un vide System.Runtime.Com pilerServices.ExtensionAttribute)
  • propriétés automatiques
  • objet Initialiseur
  • Collection Initialiseur
  • LINQ to Objects (en mettant en œuvre IEnumerable <T> méthodes d'extension, voir LinqBridge)
1

lambdas & Les méthodes d'extension sont traitées uniquement par le compilateur et peut être utilisé avec le framework .Net 2.0.

+1

Lambdas en tant que délégués, oui. Mais lambdas comme Expressions s'appuient sur la classe Expression de .NET 3.5. –

3

Pour définir les méthodes d'extension, vous devrez fournir la classe suivante si vous ciblez .NET 2.0:

namespace System.Runtime.CompilerServices { 
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)] 
    sealed class ExtensionAttribute : Attribute { } 
} 
+0

J'ai aussi dû faire ceci (vous avez trouvé cela sur un autre site) pour pouvoir utiliser Ninject 1.0 for 2.0 dans un projet 3.5 SP1. Très bizarre ... –

5

À peu près tout! Daniel Moth couvre ce here et here. Cela ne laisse que le support de l'exécution: LINQ-to-Objects est fourni par LINQBridge - ce qui laisse seulement de plus grandes API comme le support d'Expression, et des outils comme LINQ-to-SQL. Ceux-ci sont trop gros pour être raisonnablement reportés sur .NET 2.0, donc j'utiliserais .NET 3.5 pour ceux-ci.

5

Je couvre ceci dans un article on my site.

La plupart des fonctionnalités C# 3.0 sont disponibles lors du ciblage de .NET 2.0. Pour les méthodes d'extension, vous devez définir un attribut supplémentaire. Les arbres d'expression ne sont pas disponibles du tout. Le support d'expression de requête est basé sur une traduction suivie de règles C# "normales", vous aurez donc besoin de quelque chose pour fournir les méthodes Select, Where etc. LINQBridge est l'implémentation standard de "LINQ to Objects in .NET 2.0". Vous pouvez souhaiter déclarer les délégués dans les familles de délégués Func et Action pour faciliter l'utilisation des expressions lambda, puis les supprimer si/quand vous passez à .NET 3.5

2

Vous pouvez utiliser la version Mono du système .Core qui prend entièrement en charge les arbres d'expression LINQ &. J'ai compilé sa source sur .net 2.0, et maintenant je peux l'utiliser dans mes projets .net2.0. Ceci est idéal pour les projets qui doivent être déployés sur win2k, où .net3.5 n'est pas disponible.

+0

ces arborescences d'expression requièrent-elles .Net 2.0 SP1? – Lucas

+0

non. plaine vieux .NET 2.0. Fonctionne très bien même sur les machines win2k. –