我想知道这是否可行:
我想有一个列表,我可以添加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;
}
}
}
答案 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());