C# Predicate<T> 中,它是指参数为 1 个,返回值类型为 bool 的委托。
public T Do<T>(Predicate<T> check, T value, T defaultValue) { if (check.Invoke(value)) { return value; } return defaultValue; } int result = Do(m => m > 0, 3, 0);
上述调用 Do 时,可以不写作 Do<int>,因为 C# 根据参数,已经猜到了是 int 类型,故可以省略 <int>。
Do 的意思就是:
将 value 作为 check 的参数,进入 check 判断,true 返回 value,false 返回 defaultValue。
不喜欢用 Predicate<T>,用更灵活的也可以,比如:
public T Do<T>(Func<T, bool> check, T value, T defaultValue) { if (check(value)) { return value; } return defaultValue; } Func<int, bool> f = m => m > 0; /* // 复杂点也可以这样写: Func<int, bool> f = (m) => { return m > 0; }; */ int result = Do(f, 3, 0);
相关阅读
C# 泛型-创建自己的泛型
C# 中 Action 和 Func
C# 3.0 - Lambda
抛弃传统,用委托、Lambda、Linq 取 List 中的项