Объединение двух списков в третий список - ошибка
У меня есть два списка классов - "поставки" и "пикапы" - и я пытаюсь составить третий список, который бы объединял поставки и пикапы, то есть список, отображающий ВСЕ доставки и пикапы вместо одного или другого.
После поиска немного, я попробовал это:
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>'
Что это значит, и как я могу это исправить?
Благодарю.
Редактировать: в настоящее время пользователь вводит данные через форму окна. Поставки имеют две строки и интервал времени, пикапы наследуются от поставок, но также имеют еще две строки.
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;
}
2 ответа
Сообщение об ошибке предполагает, что 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();
}
Я бы посоветовал сделать так:
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();
}