c#函数式编程
函数式编程模式常常给人一种学术性和抽象的感觉,其实隐藏着一些能让代码更安全、更易维护的实用模式。
C#多年来已经采纳了许多函数式编程特性:
-
Records用于实现不可变性
-
LINQ用于函数式转换
-
Lambda表达式实现一等函数
这些特性不仅仅是语法糖 — 它们能帮助预防bug,使代码更容易理解。
让我们来看看今天就能在C#项目中使用的五种实用模式。
高阶函数 高阶函数可以接收其他函数作为参数或将函数作为结果返回。它们让你能够编写更灵活和可组合的代码,因为你可以像传递数据一样传递行为。
高阶函数的常见例子是LINQ中的Where和Select,它们接收用于转换数据的函数。
让我们用高阶函数重构这个验证示例:
public class OrderValidator
{
public bool ValidateOrder(Order order)
{
if(order.Items.Count ==0)return false;
if(order.TotalAmount <=0)return false;
if(order.ShippingAddress ==null)return false;
return true;
}
}
// What if we need:
// - different validation rules for different countries?
// - to reuse some validations but not others?
// - to combine validations differently?
这里展示了如何使用高阶函数使其更灵活:
public static class OrderValidation
{
public static Func<Order, bool>CreateValidator(string countryCode,decimal minimumOrderValue)
{
var baseValidations =CombineValidations(
o => o.Items.Count >0,
o => o.TotalAmount >= minimumOrderValue,
o => o.ShippingAddress !=null
);
return countryCode switch
{
"US"=>CombineValidations(
baseValid