【问题标题】:Linq Enumerable.Where Func not getting calledLinq Enumerable.Where Func 没有被调用
【发布时间】:2017-02-18 00:20:12
【问题描述】:

我有以下代码

var filteredList = posData.Where(x => MyFilter(x, ruleDetail.wheres)).ToList();

其中 MyFilter 被定义为

    static bool MyFilter(Dictionary<string,string> dict, List<WhereClause> wheres)
    {
        if (dict["x"] == "y")
            return true;
        else
            return false;
    }

posData 的类型是

List<dictionary<string,string>>

我在 MyFilter 函数中有一个断点,但代码执行永远不会到达那里。我正在寻找 MyFilter 以根据 wheres 参数进行一些自定义分析。这只是代码的一小部分。请帮我弄清楚为什么 MyFilter 没有被调用?

【问题讨论】:

  • postDataDictionary&lt;string, string&gt; 的集合吗?
  • 顺便说一句,你方法的主体可以替换为:return dict["x"] == "y";
  • 也许posData 是空的?这将阻止MyFilter() 被调用。
  • posData 不为空。它是一个 List> 并且有 Count() > 0
  • @FelipeOriani 是的

标签: c# linq ienumerable


【解决方案1】:

您的代码应该可以正常工作并且符合预期。它在您的情况下不起作用的唯一原因是如果 posData 为空,因此请确保它不是

我用这段代码试了一下(和你的基本一样)

static void Main()
{
    // create test collection
    var posData = new List<Dictionary<string,string>>();
    var test = new Dictionary<string,string>();
    test.Add("x", "y");
    posData.Add(test);

    // call the Where function
    var filteredList = posData.Where(x => MyFilter(x)).ToList();

    Console.WriteLine(filteredList.Count); // outputs "1"
}

static bool MyFilter(Dictionary<string,string> dict)
{
    Console.WriteLine("hello"); // outputs "hello"
    return dict["x"] == "y";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多