C# 有没有可能推迟“取消”呢;“bool”;在字典中测试<;字符串,Func<;bool,object>&燃气轮机;

C# 有没有可能推迟“取消”呢;“bool”;在字典中测试<;字符串,Func<;bool,object>&燃气轮机;,c#,dictionary,lambda,expression,expression-trees,C#,Dictionary,Lambda,Expression,Expression Trees,我有一个字典我想有条件地循环浏览字典,只有当bool==true时才添加“object” 但我不知道如何将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.

我有一个
字典
我想有条件地循环浏览字典,只有当
bool==true时才添加“object”

但我不知道如何将
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());
    } 
}
foreach(参数中的KeyValuePair对)
{   
//错误对.Value(),委托函数有1个参数,但使用0个参数调用。
//pair.Value(true)显然起作用,但却违背了目的
if(pair.Value()!=null)
cmd.Parameters.AddWithValue(pair.Key,pair.Value());
} 
}

我是否应该使用
表达式
并编译/计算布尔值。如果是这样,怎么做?

我明白了,你想存储一个条件,当你去提取它时,它会被解决,所以你真正需要的是这种字典

Dictionary<string, Func<object>> dictionary= new Dictionary<string, Func<object>>()
然后你的代码就完美地工作了

foreach (KeyValuePair<string, Func<object>> pair in dictionary)
{     
    if (pair.Value() != null)
    cmd.Parameters.AddWithValue(pair.Key, pair.Value());
}
现在你的逻辑是这样的

foreach (KeyValuePair<string, Action<bool>> pair in dictionary)
            pair.Value(bool);

在你的问题中,你准确地展示了如何向代表传递一个布尔右键,这样你就清楚地知道怎么做了。是否尝试添加对象的条目如果某项为真,则
Func
中没有
bool
:它表示将bool作为输入的函数是的,我想在pair.Value(bool)表达式中计算该bool。这有意义吗?@Robert4Real不,计算它作为参数接受的布尔值没有意义。在您提供布尔值之前不存在布尔值,这意味着您必须已经从委托以外的其他来源对其进行了求值。从评估代理中得到的是一个
对象
,而不是
bool
。理想情况下,我希望将bool参数传递到函数中。因此,我不想把它叫做If(pair.Value()!=null),我只想把它叫做“If(pair.Value(bool))”,而不需要对null进行测试。我真正想要的是一个三维字典,比如dictionary,如果bool==true,然后AddWithValue(pair.Key,pair.Value)。但是类似的东西是不存在的,除非我使用元组。我给你一个投票,因为我提供了一个深思熟虑的解释,不像这个帖子上的其他一些无用的评论。但是,这不是我的理想解决方案,因为我不能在具有“foreach”的函数之外公开cmd参数。这需要保留一个实现细节,所以我只想传递一个上面提到的三维字典,只传递一个键、条件和对象,没有额外的操作。谢谢,这似乎是合理的。我有两种方法处理这些问题
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);
var list = new List<Action<bool>>();
list.Add(condition => { if (condition) cmd.Parameters.AddWithValue("key", obj) });
list.ForEach(x => x(bool));