我有一个Dictionary<string, Func<bool, object>>
我想有条件地遍历字典并添加&#34;对象&#34;仅在bool == true
但我不确定如何将pair.Value()
作为布尔传递。
foreach (KeyValuePair<string, Func<bool, object>> pair in parameters)
{
//error pair.Value(), Delegate Func has 1 parameter(s) but is invoked with 0 arguments.
//pair.Value(true) obviously works, but defeats the purpose
if (pair.Value() != null)
cmd.Parameters.AddWithValue(pair.Key, pair.Value());
}
}
我应该使用Expression<Func<bool, object>>
并编译/评估bool。如果是这样,怎么样?
答案 0 :(得分:1)
我明白了你想要存储一个条件,这个条件将在你去拉它时解决,所以你真正需要的就是这种字典
Dictionary<string, Func<object>> dictionary= new Dictionary<string, Func<object>>()
你会添加这样的条目
dictionary.Add("key", () => /*Insert your condition here*/ 3 == 2 ? /*If True*/ obj : /*If False*/ null );
然后您的代码完美运行
foreach (KeyValuePair<string, Func<object>> pair in dictionary)
{
if (pair.Value() != null)
cmd.Parameters.AddWithValue(pair.Key, pair.Value());
}
修改强>
优秀,这里有2个选项:
选项1
你制作这个词典
var dictionary = new Dictionary<string, Action<bool>>();
然后你这样添加
dictionary.Add("key", condition => { if (condition) cmd.Parameters.AddWithValue("key", obj); });
现在你的逻辑变成了这个
foreach (KeyValuePair<string, Action<bool>> pair in dictionary)
pair.Value(bool);
选项2
看起来你真正想要的是这个
var list = new List<Action<bool>>();
list.Add(condition => { if (condition) cmd.Parameters.AddWithValue("key", obj) });
然后你的逻辑就像这样
list.ForEach(x => x(bool));