3

これが可能かどうか疑問に思っています:

bool メソッドを追加してそれらのメソッドを検証し、それらがすべて true の場合に true を返すことができるリストが必要です。少なくとも 1 つが false の場合、false を返します。

問題は、次のようなことをするときです:

private int _value1, _value2, _value3, _value4;

private bool check2()
{
    return _value2 + _value3 > _value4;
}

private bool check2()
{
   return _value2 + _value3 > _value4;
}

List<bool> constraints = new List<bool>();
constrains.Add(check1());
constrains.Add(check2());

追加されたブール値はもちろん、リストに追加されたときの検証の結果です。わかりました;-)

実際に再検証されたメソッドでリストを作成するにはどうすればよいですか? 敬具、

マティス

これが私が欲しかったものです。

以下の回答を参考にしてください。私はこれを作りました。同じものを探している他の人に役立つかもしれません。

public class TestClass
{
    private int _value1, _value2, _value3, _value4;

    private void button1_Click(object sender, EventArgs e)
    {
        ConstraintsList cl = new ConstraintsList();
        cl.Add(check1);
        cl.Add(check2);

        bool test1 = cl.AllTrue;
        bool test2 = cl.AnyTrue;

        _value4 = -5;

        bool test3 = cl.AllTrue;
        bool test4 = cl.AnyTrue;

        _value4 = 5;

        cl.Remove(check2);

        bool test5 = cl.AllTrue;
        bool test6 = cl.AnyTrue;
    }

    private bool check1()
    {
        return _value1 + _value2 == _value3;
    }

    private bool check2()
    {
        return _value2 + _value3 > _value4;
    }

}

使用:

public class ConstraintsList
{
    private HashSet<Func<bool>> constraints = new HashSet<Func<bool>>();

    public void Add(Func<bool> item)
    {
        try
        {
            constraints.Add(item);
        }
        catch(Exception)
        {

            throw;
        }
    }

    public bool AllTrue { get { return constraints.All(c => c()); } }
    public bool AnyTrue { get { return constraints.Any(c => c()); } }

    public void Remove(Func<bool> item)
    {
        try
        {
            constraints.Remove(item);
        }
        catch(Exception)
        {
            throw;
        }

    }
}
4

2 に答える 2

7

はい、可能です。次のリストを定義できます。Func<bool>

List<Func<bool>> constraints = new  List<Func<bool>> 

boolしたがって、このリストにメソッドを追加できます。

constraints.Add(check1);
constraints.Add(check2);

したがって、次のようなリストを使用できます。

foreach (var method in constraints)
{
     bool flag = method();
     ... // Do something more
}

または、必要に応じて別の回答のように LINQ を使用します

于 2013-03-20T10:12:15.660 に答える
6

これを試して

List<Func<bool>> constraints = new List<Func<bool>> ();

// add your functions
constraints.Add(check1);
constraints.Add(check2);

// and then determine if all of them return true
bool allTrue = constraints.All (c => c());

// or maybe if any are true
bool anyTrue = constraints.Any(c => c());
于 2013-03-20T10:16:47.237 に答える