【问题标题】:Problems in adding collection to list with list.Add使用 list.Add 将集合添加到列表时出现问题
【发布时间】:2012-10-12 10:55:33
【问题描述】:
 private List<T> ParsePolicyDetails<T>(List<HouseHoldview> lsthousehold)
    {
        List<T> lstPolicyInfo = new List<T>();

        var checkInHouseHold = from c in lsthousehold
                               where c.PolicyDetail.Any(p => p.LineOfBusiness.Trim().ToUpper() == "A" && p.PolicySourceSystem.ToUpper().Trim() != "PLCS"
                                   && p.PolicySourceSystem.ToUpper().Trim() != "APS"
                                   && p.PolicySourceSystem.ToUpper().Trim() != "FOREMOST")
                               select c.PolicyDetail;

        foreach (var policies in checkInHouseHold)
        {
            var chek=policies.Where(p => p.LineOfBusiness.Trim().ToUpper() == "A" && p.PolicySourceSystem.ToUpper().Trim() != "PLCS"
                                     && p.PolicySourceSystem.ToUpper().Trim() != "APS"
                                     && p.PolicySourceSystem.ToUpper().Trim() != "FOREMOST" && p.LineOfBusiness.ToUpper().Trim() == "A");
            lstPolicyInfo.Add(chek);
        }
        return lstPolicyInfo;
    }

看起来很简单的代码,但是会报错。由于 chek 不是 T 类型,如何处理

错误是'System.Collections.Generic.List.Add()的最佳重载方法匹配

【问题讨论】:

  • 请添加语言标签,这看起来像 C#
  • 1) 您正在尝试将一个序列(调用Where 的结果)添加到一个列表中。这听起来是个坏主意。 2)看起来这根本不应该是通用的。 3) “但给出错误”永远是不够的信息 - 总是说出错误是什么。

标签: linq c#-4.0 generics


【解决方案1】:

这个方法不是通用的;你想换

  • List&lt;T&gt;List&lt;WhateverTypeHouseHoldview.PolicyDetailIs&gt;
  • ParsePolicyDetails&lt;T&gt;ParsePolicyDetails
  • lstPolicyInfo.AddlstPolicyInfo.AddRange

【讨论】:

  • 成功了,请您简要告诉我 AddRange 的作用是什么
  • Add 仅将单个项目添加到列表中; AddRange 获取一个 range 项并将它们 all 添加到列表中。因此,由于chek 是一系列项目(它是LINQ 查询的结果),您需要使用AddRange 而不是Add
【解决方案2】:

我认为 var 的使用可能会造成混淆。

尝试将它们更改为实际类型,这可能有助于您了解发生了什么。

如果没有看到其他班级的设置情况,很难判断。

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多