我想知道这是否可能:
我想要一个列表,我可以在其中添加布尔方法并验证这些方法,当它们都为真时,返回真。当至少一个为假时,返回假。
问题是,当我做类似的事情时:
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;
}
}
}