将条件传递给函数参数

时间:2015-05-19 00:35:13

标签: c#

我正在尝试做这样的事情:

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的变量传递给此函数?

2 个答案:

答案 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);
}