8

私は何かを書くことができるようにしたい

void Start(some condition that might evaluate to either true or false) {
    //function will only really start if the predicate evaluates to true
}

私はそれが次のような形でなければならないと思います:

void Start(Predicate predicate) {
}

述語が true または false に評価されるたびに、Start 関数内をチェックするにはどうすればよいですか? 述語の使用は正しいですか?

ありがとう

4

3 に答える 3

13

関数で述語を使用する簡単な例を次に示します。

static void CheckRandomValueAgainstCriteria(Predicate<int> predicate, int maxValue)
{
    Random random = new Random();
    int value = random.Next(0, maxValue);

    Console.WriteLine(value);

    if (predicate(value))
    {
        Console.WriteLine("The random value met your criteria.");
    }
    else
    {
        Console.WriteLine("The random value did not meet your criteria.");
    }
}

...

CheckRandomValueAgainstCriteria(i => i < 20, 40);
于 2010-04-24T03:56:52.777 に答える
2

次のようなことができます。

void Start(Predicate<int> predicate, int value)
    {
        if (predicate(value))
        {
            //do Something
        }         
    }

このようにメソッドを呼び出す場所:

Start(x => x == 5, 5);

それがどれほど役立つかはわかりません。Predicatesリストのフィルタリングなどに非常に便利です。

List<int> l = new List<int>() { 1, 5, 10, 20 };
var l2 = l.FindAll(x => x > 5);
于 2010-04-24T04:02:05.467 に答える
1

設計の観点から、関数に渡される述語の目的は通常、一部の IEnumerable をフィルター処理することです。述語は各要素に対してテストされ、アイテムがフィルター処理されたセットのメンバーであるかどうかを判断します。

あなたの例では、ブール値の戻り値の型を持つ関数を使用する方が良いでしょう。

于 2010-04-24T04:03:10.543 に答える