You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms C# 酿造日志多条件搜索功能无返回结果问题求解

代码核心问题

1. criteriaSort条件判断逻辑错误

  • WinForm控件的Text属性永远不会返回null,未输入时只会是空字符串"",你代码中所有判断dateCriteria.Text == null的分支永远无法触发,导致叠加日期的多条件分支、配方+酿酒师的双条件分支(该分支要求dateCriteria.Text == null)都无法命中,最终会直接进入最后的else分支。
  • 部分逻辑混用了单&和双&&,单&不会做短路判断,既可能引发空引用异常,也会导致判断逻辑不符合预期。
  • 未做无任何搜索条件的兜底判断,进入else分支时如果有未选中的筛选项,调用SelectedItem.ToString()会直接抛出空引用异常,就算没抛异常,getResults要求三个参数都匹配日志内容,也会因为空值无法匹配返回无结果。

2. getResults匹配逻辑无维度区分(潜在问题)

你当前直接用log.Contains()匹配参数,不区分参数对应的维度,比如某个酿酒师的名字和某个配方名重复时,会出现误匹配。


修复方案

第一步:重写criteriaSort的判断逻辑

// 确定当前选中的搜索条件并调用对应的getResults方法
public string criteriaSort()
{
    bool hasRecipe = recipeCriteria.SelectedItem != null;
    bool hasBrewer = brewerCriteria.SelectedItem != null;
    bool hasDate = !string.IsNullOrEmpty(dateCriteria.Text);

    if (hasRecipe && !hasBrewer && !hasDate)
    {
        string recipe = recipeCriteria.SelectedItem.ToString();
        return getResults(recipe);
    }
    else if (!hasRecipe && hasBrewer && !hasDate)
    {
        string brewer = brewerCriteria.SelectedItem.ToString();
        return getResults(brewer);
    }
    else if (!hasRecipe && !hasBrewer && hasDate)
    {
        string date = dateCriteria.Text;
        return getResults(date);
    }
    else if (hasRecipe && hasBrewer && !hasDate)
    {
        string recipe = recipeCriteria.SelectedItem.ToString();
        string brewer = brewerCriteria.SelectedItem.ToString();
        return getResults(recipe, brewer);
    }
    else if (hasRecipe && !hasBrewer && hasDate)
    {
        string recipe = recipeCriteria.SelectedItem.ToString();
        string date = dateCriteria.Text;
        return getResults(recipe, date);
    }
    else if (!hasRecipe && hasBrewer && hasDate)
    {
        string brewer = brewerCriteria.SelectedItem.ToString();
        string date = dateCriteria.Text;
        return getResults(brewer, date);
    }
    else if (hasRecipe && hasBrewer && hasDate)
    {
        string recipe = recipeCriteria.SelectedItem.ToString();
        string brewer = brewerCriteria.SelectedItem.ToString();
        string date = dateCriteria.Text;
        return getResults(recipe, brewer, date);
    }
    else
    {
        // 无任何搜索条件的兜底逻辑,可按需调整为返回所有日志
        return "请至少选择一个搜索条件";
    }
}

第二步:优化getResults匹配逻辑(推荐)

假设你的日志固定顺序为[0]配方、[1]酿酒师、[2]日期,按对应维度匹配避免误匹配,三参数重载修改示例:

// 接收三个搜索条件的重载方法
public string getResults(string recipe, string brewer, string date)
{
    List<List<string>> brewLogList = brewLogs_ListOFlists();
    List<List<string>> searchResults = new List<List<string>>();
    string formatedSearchResults = "";

    foreach (List<string> log in brewLogList)
    {
        // 按维度精准匹配,可按需添加Trim()、忽略大小写的逻辑优化兼容
        if (log[0] == recipe && log[1] == brewer && log[2] == date)
        {
            searchResults.Add(log);
        }
    }

    if (searchResults.Count > 0)
    {
        foreach (List<string> log in searchResults)
        {
            formatedSearchResults += log[0] + ", " + log[1] + ", " + log[2] + Environment.NewLine;
        }
    }
    else
    {
        formatedSearchResults = "No brew log found matching that criteria";
    }

    return formatedSearchResults;
}

其余重载的getResults方法也按照对应参数的维度调整匹配逻辑即可。


内容的提问来源于stack exchange,提问作者MycoNut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:54:10