【问题标题】:Combining two lists to make a third list - error将两个列表组合成第三个列表 - 错误
【发布时间】:2012-12-01 23:54:19
【问题描述】:

我有两个类别列表 - “deliveries”和“pickups” - 我正在尝试制作第三个列表,它将将交付和取件添加在一起,即显示所有交付和取件的列表,而不是一个或其他。

搜索了一下,我尝试了这个:

public List<String> listVisits()
    {
        List<String> listVisits = new List<string>();
        listVisits.AddRange(listDeliveries);
        listVisits.AddRange(listPickups);
    }

但我只是收到错误提示:

The best overloaded method match for 'System.Collections.Generic.List<string>.AddRange(System.Collections.Generic.IEnumerable<string>)' has found some invalid arguments

还有这个:

Argument 1: cannot convert from 'method group' to 'System.Collections.Generic.IEnumerable<string>'

这是什么意思,我该如何解决?

谢谢。

编辑:当前用户通过窗体输入数据。 Deliveries 有两个 String 和一个 TimeSpan,Pickups 继承自 Deliveries 但还有两个 String。

    public List<String> listDeliveries()
    {
        List<String> listDeliveries = new List<string>();
        foreach (deliveries Deliv in delivery)
        {
            String DelivAsString = Deliv.DeliveryString();
            listDeliveries.Add(DelivAsString);
        }
        return listDeliveries;
    }

    public List<String> listPickups()
    {
        List<String> listPickups = new List<string>();
        foreach (pickups Pickup in pickup)
        {
            String PickupAsString = Pickup.PickupString();
            listPickups.Add(PickupAsString);
        }
        return listPickups;
    }

【问题讨论】:

  • 显然这两个列表都不是List&lt;String&gt;,而是自定义类。他们会覆盖ToString吗?
  • 请给我们listDeliveries和listPickups的定义。

标签: c# list addrange


【解决方案1】:

错误消息表明listDeliveries 和listPickups 是方法,而不是变量。所以你需要调用这些方法。同时,我强烈建议您重命名您的方法以遵循 .NET 命名约定。所以你可能有:

public List<String> ListVisits()
{
    List<String> visits = new List<string>();
    visits.AddRange(ListDeiveries());
    visits.AddRange(ListPickups());
    return visits;
}

或者使用 LINQ:

public List<String> ListVisits()
{
    return ListDeliveries().Concat(ListPickups()).ToList();
}

【讨论】:

    【解决方案2】:

    我建议像这样重做这个东西:

    public List<string> GetDeliveryStrings()
    {
        //assuming "deliveries" is your collection of deliveries 
        //otherwise your coding standards are not, well, standard
        //additionally, per Tim Schmelter's suggestion, take a look at 
        //overriding the .ToString() method
        return deliveries.Select(d => d.DeliveryString()).ToList()
    }
    
    public List<String> GetPickupStrings()
    {
        return pickups.Select(p => p.PickupString()).ToList();
    }
    
    //lifted from Jon Skeet's answer
    public List<String> GetVisitStrings()
    {
       return GetDeliveryStrings().Concat(GetPickupStrings()).ToList();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2013-05-16
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多