これが可能かどうか疑問に思っています:
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;
}
}
}