2008-10-06 11 views
13

Jakie są niektóre z nowych funkcji, które mogą być używane w .NET 2.0, które są specyficzne dla C# 3.0/3.5 po aktualizacji do Visual Studio 2008? Ponadto, jakie są niektóre funkcje, które nie są dostępne?C# .NET 3.0/3.5 funkcje 2.0 przy użyciu Visual Studio 2008

Dostępne

  • lambdas
  • metody rozszerzeń (deklarując pusty System.Runtime.CompilerServices.ExtensionAttribute)
  • Właściwości Automatyczne
  • obiektu inicjalizatory
  • Kolekcja inicjalizatory
  • LINQ to Objects (poprzez implementację IE numerable rozszerzenie metod, zobacz LinqBridge)

Niedostępne

  • ekspresyjne drzewa
  • WPF/Silverlight Biblioteki
+0

Drzewa ekspresyjne są dostępne przy użyciu Mono. Zobacz moją odpowiedź poniżej. –

Odpowiedz

16

Można użyć dowolnego nową funkcję C# 3.0, który jest obsługiwany przez kompilator emitując 2,0 zgodny L i nie odnosi się żadnego z nowych 3,5 zespołów:

  • lambda (stosowany jako Func<..>, nie Expression<Func<..>>)
  • metody przedłużenie (poprzez uznanie pusty System.Runtime.Com pilerServices.ExtensionAttribute)
  • właściwości Automatyczne
  • Object inicjalizatory
  • Kolekcja inicjalizatory
  • LINQ to Objects (poprzez wdrożenie IEnumerable <T> metody rozszerzenie patrz LinqBridge)
1

lambdas & metody rozszerzeń są obsługiwane wyłącznie przez kompilator i może być używane ze środowiskiem .Net 2.0.

+1

Lambdas jako delegaci, tak. Ale lambdas jako wyrażenia polegają na klasach Expression z .NET 3.5. –

3

Aby zdefiniować metody rozszerzenie, musisz dostarczyć następujące klasy jeśli kierowanie .NET 2.0:

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

Musiałem również to zrobić (znalazłem sugerowanie tego na innej stronie), aby móc używać programu Ninject 1.0 dla 2.0 w projekcie 3.5 SP1. Bardzo wierd ... –

5

Prawie wszystko! Daniel Moth obejmuje ten here i here. Pozostawia to tylko obsługę środowiska wykonawczego: LINQ-to-Objects jest dostarczane przez LINQBridge - co pozostawia tylko większe API, takie jak obsługa Expression, i narzędzia takie jak LINQ-SQL. Są zbyt duże, aby można je było przenieść do wersji .NET 2.0, więc użyłbym .NET 3.5.

5

Zajmuje się tym w article on my site.

Prawie wszystkie funkcje C# 3.0 są dostępne podczas kierowania na .NET 2.0. W przypadku metod rozszerzeń należy zdefiniować dodatkowy atrybut. Drzewa wyrażeń nie są w ogóle dostępne. Obsługa wyrażenia zapytania jest oparta na tłumaczeniu, po którym następuje "normalna" reguła C#, więc będziesz potrzebować czegoś, co zapewni metody Wybierz, Gdzie itd. LINQBridge to de facto standardowa implementacja "LINQ to Objects in .NET 2.0". Możesz również chcieć zadeklarować delegatów w rodzinach delegatów Func i Action, aby ułatwić pracę z wyrażeniami lambda - a następnie usunąć je, jeśli/kiedy przejdziesz do .NET 3.5

2

Możesz użyć wersji Mono systemu .Core który w pełni obsługuje drzewa wyrażeń LINQ &. Skompilowałem jego źródło w stosunku do .net 2.0, a teraz mogę go używać w moich projektach .net2.0. Jest to idealne rozwiązanie dla projektów, które muszą być wdrożone na win2k, gdzie .net3.5 nie jest dostępny.

+0

czy te drzewa wyrażeń wymagają .NET 2.0 SP1? – Lucas

+0

nie. zwykły stary .NET 2.0. Działa świetnie nawet na komputerach z systemem Win2K. –

Powiązane problemy