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

列表与Hidden Field编码匹配计数问题及C#代码修正求助

问题修正:统计匹配编码数量的C#代码错误修复

原代码存在的核心问题

  1. 匹配逻辑完全错误:
    原代码中x.FoodCode.ToString() == listCS.Any().ToString()是逻辑误区,listCS.Any()仅判断集合是否包含元素,返回布尔值,转成字符串后只会是"True"或"False",根本无法实现「判断FoodCode是否在Hidden Field的编码列表中」的需求。
  2. 语法错误:
    else (itmAlreadyExistsCnt > 1)缺少if关键字,属于无效语法,无法编译。
  3. 潜在异常风险:
    直接使用Convert.ToInt32(categoryId)和Convert.ToInt32(subCategoryId),如果传入的字符串无法转换为整数,会抛出FormatException。
  4. 空值未处理:
    hfCheckedChildCS.Value为空时,Split(',')会生成包含空字符串的集合,可能导致误匹配。

修正后的代码

public void GetCSWSTUCPAFreeRestrictBlkFood(string categoryId, string subCategoryId)
{
    string rtnMsg = string.Empty;
    int itmAlreadyExistsCnt = 0;
    List<CurrentDietSummary> restrData = GetPARestrictedFood();
    
    // 处理Hidden Field的值:拆分后过滤空字符串,避免无效匹配
    var listCS = hfCheckedChildCS.Value?.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List<string>();

    if (restrData != null && restrData.Count > 0)
    {
        // 先验证categoryId和subCategoryId是否能正常转成整数
        if (int.TryParse(categoryId, out int catId) && int.TryParse(subCategoryId, out int subCatId))
        {
            // 正确的匹配逻辑:判断FoodCode的字符串形式是否在listCS集合中
            itmAlreadyExistsCnt = restrData.Count(x => x.CategoryId == catId 
                    && x.SubCategoryId == subCatId
                    && listCS.Contains(x.FoodCode.ToString()));
        }
        else
        {
            // 处理参数无法转换为整数的情况
            rtnMsg = "Invalid category or sub-category ID.";
            return;
        }
    }

    if (itmAlreadyExistsCnt == 1)
        rtnMsg = "Detail corresponding to Item already exist.";
    else if (itmAlreadyExistsCnt > 1)  
        rtnMsg = "Detail corresponding to some Item(s) already exist.";
    // 可根据需求添加itmAlreadyExistsCnt为0时的提示逻辑
}

关键优化点说明

  • 使用StringSplitOptions.RemoveEmptyEntries拆分Hidden Field的值,自动过滤空字符串,避免无效匹配。
  • 用int.TryParse替代Convert.ToInt32,避免参数非法时抛出异常,同时增加错误分支处理。
  • 替换错误的匹配逻辑为listCS.Contains(x.FoodCode.ToString()),实现「判断当前食物编码是否在目标列表中」的核心需求。
  • 修复else if的语法错误,确保分支逻辑正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:47:00