C# Predicate<T>

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 中的项 


你可能感兴趣的