快速预览:C# 3.0的新东西

时间:2025-03-08 18:08:08

Lambda 表达式:

Func<string, string> doubleAppend= x => x + x;
Console.WriteLine (doubleAppend(“test”)); // testtest

LINQ 查询:

string[] names = { "Tom", "Dick", "Harry" };
IEnumerable<string> filteredNames =
Enumerable.Where (names, n => n.Length >= 4); // 字符长度大于等于4的名字

扩展方法:

string[] names = { "Tom", "Dick", "Harry" };
IEnumerable<string> filteredNames = names.Where (n => n.Length >= 4);

隐式类型的局部变量:

var filteredNames = names.Where (n => n.Length == 4);

查询理解语法:

var filteredNames = from n in names where n.Length >= 4 select n;

匿名类型:

var query = from n in names where n.Length >= 4
select new {
Name = n,
Length = n.Length
};
var dude = new { Name = "Bob", Age = 20 };

隐藏类型的数组:

var dudes = new[]
{
new { Name = "Bob", Age = 20 },
new { Name = "Rob", Age = 30 }
};

对象初始化:

class Bunny
{
public string Name;
public bool LikesCarrots;
public bool LikesHumans;
}

// C# 3.0
Bunny b1 = new Bunny { Name="Bo", LikesCarrots=true, LikesHumans=false }; // C# 2.0
Bunny b2 = new Bunny();
b2.Name = "Bo";
b2.LikesHumans = false;

自动的属性:

public class Stock
{
// C# 3.0:
public decimal X { get; set; } // C# 2.0:
private decimal y;
public decimal Y
{
get { return y; }
set { y = value; }
}
}

Partial 方法:

// PaymentFormGen.cs — auto-generated
partial class PaymentForm
{
...
partial void ValidatePayment (decimal amount);
} // PaymentForm.cs — hand-authored
partial class PaymentForm
{
...
partial void ValidatePayment (decimal amount)
{
if (amount > 100)
...
}
}

表达式树:

Expression<Func<string, bool>> predicate = s => s.Length > 10;
Func<string, bool> fun = predicate.Compile();
Console.WriteLine(fun("test").ToString());