我正在尝试做这样的事情:
public bool IsBetween(Condition c)
{
if(c) return true;
else return false;
}
public static int main()
{
// Returns true if 1 < x < 10
bool b1 = IsBetween(x => x > 1 && x < 10);
// Returns true if 100 < x < 1000
bool b2 = IsBetween(x => x > 100 && x < 1000);
}
但问题是如何声明这样的函数,以及如何将我想要比较x
的变量传递给此函数?
答案 0 :(得分:2)
你非常接近正确的表示法。以下任何委托类型都可以使用,但谓词与您的意思非常匹配:
using Condition = Predicate<int>;
// using Condition = Converter<int, bool>
// using Condition = Func<int, bool>
public bool IsBetween(Condition c)
{
调用它时,您需要提供x
的实际值:
if (c(42)) return true;
else return false;
但是这个if (test) return true; else return false;
是一种反模式,只是
return c(42);
更好。
}
最后,您已经有了正确的lambda表示法来定义条件
public static int main()
{
// Returns true if 1 < x < 10
bool b1 = IsBetween(x => x > 1 && x < 10);
// Returns true if 100 < x < 1000
bool b2 = IsBetween(x => x > 100 && x < 1000);
}
答案 1 :(得分:1)
如果您知道x
的类型为T
,请使用Predicate<T>
:
Predicate<int> betweenOneAndTen = x => x > 1 && x < 10;
Predicate<int> betweenHundredAndThousand = x => x > 100 && x < 1000;
var rnd = new Random(123);
for (int i = 0 ; i != 100 ; i++) {
int n = rnd.Next(1500);
bool a = betweenOneAndTen(n);
bool b = betweenHundredAndThousand(n);
Console.WriteLine("N={0} 1 < {0} < 10 is {1}, 100 < {0} < 1000 is {2}", n, a, b);
}