验证列表中的bool方法(约束)

时间:2013-03-20 10:11:00

标签: c# list validation constraints

我想知道这是否可行:

我想有一个列表,我可以添加bool方法并验证这些方法,当它们都是真的时,返回true。当至少有一个为假时,返回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());

添加的bool当然是添加到列表时验证的结果。我知道了; - )

如何使用实际重新验证的方法创建列表? 亲切的问候,

Matthijs

这就是我想要的。

借助以下答案。我做的。可能对寻找同样事物的其他人有用。

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;
        }

    }
}

2 个答案:

答案 0 :(得分: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作为另一个答案

答案 1 :(得分: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());