正如其他人所说,当使用 C# 3.0 编译器以 .NET 2.0 运行时为目标时,可以使用 C# 3.0 功能。
与此相关的一个鲜为人知的事实是,如果提供自己的 LINQ 实现,您甚至可以将 LINQ 与 .NET 2.0 一起使用。
这是一个启用“select”和“where”运算符的示例:
namespace System.Runtime.CompilerServices
{
// defining this attribute allows using extension methods with .NET 2.0
[AttributeUsage(AttributeTargets.Method)]
public sealed class ExtensionAttribute : Attribute {}
}
namespace System
{
public delegate R Func<A, R>(A arg0);
}
namespace System.Linq
{
public static class Enumerable
{
public static IEnumerable<R> Select<T, R>(this IEnumerable<T> input, Func<T, R> f)
{
foreach (T element in input)
yield return f(element);
}
public static IEnumerable<T> Where<T>(this IEnumerable<T> input, Func<T, bool> f)
{
foreach (T element in input) {
if (f(element))
yield return element;
}
}
}
如果您想在 .NET 2.0 上充分利用 LINQ,您可以将 Mono 的 System.Core 版本与您的应用程序一起提供。