Перенос списка c # в другой список с методом между ними - PullRequest
2 голосов
/ 02 октября 2011

Не был уверен в названии, но у меня есть эта задача, с которой у меня возникают проблемы.

У меня есть список, загруженный из службы WCF.

т.е.:

 List<Stops_edited_small> StopsList = new List<Stops_edited_small>(e.Result);

В списке есть несколько элементов

, два из которых:

LatitudeField
LongitudeField

По сути, мне нужно сделать значение геокоординаты для каждой записи в списке, выполнив это:

GeoCoordinate(Convert.ToDouble(LatitudeField), Convert.ToDouble(LongitudeField));

Затем добавьте значение Geocoordinate в каждую запись в новом списке, который я затем смогу использовать.

Имеет смысл?Я не уверен, как бы я поступил по этому поводу.Нужен ли мне какой-нибудь цикл foreach для преобразования Geocoordinate в моем первоначальном списке?Должен ли я сначала преобразовать его в класс, чтобы сделать это?

Спасибо, любая помощь или пожелания приветствуются.

(РЕДАКТИРОВАТЬ: просто добавить это на Windows Phone, так что .net 4есть в наличии)

Ответы [ 2 ]

7 голосов
/ 02 октября 2011

Вы можете использовать метод ConvertAll, который возвращается к .NET 2.0 до появления Linq.

Вот пример:

Список приведения в список в .NET 2.0

и MSDN Артикул:

http://msdn.microsoft.com/en-us/library/73fe8cwf.aspx

5 голосов
/ 02 октября 2011

Если вы используете .NET 3.5 или новее, вы можете использовать LINQ2Objects

var coordinateList = StopsList.Select(stop =>
    new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
                      Convert.ToDouble(stop.LongitudeField))).ToList();

Если вы используете более старую версию .NET, вам нужно использовать явный цикл.

var coordinateList = new List<GeoCoordinate>();
foreach(var stop in StopsList)
{
    coordinateList.Add(
        new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
                          Convert.ToDouble(stop.LongitudeField)));
}

Редактировать

Если вы хотите объединить оба новых GeoCoordinate с остановками, у вас есть несколько вариантов.

Либо создайте список с анонимным типом

var combinedList = StopsList.Select(stop =>
    new {
        s = stop,
        coord = new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
                      Convert.ToDouble(stop.LongitudeField)),
    }).ToList();

Вы также можете сделать то же самое с классом, который вы создаете, заменив new { на new YourClass {.

Вы также можете использовать метод Zipиспользуя оба приведенных выше списка

var combinedList = StopsList.Zip(coordinateList, Tuple.Create).ToList();

Это дает вам List<Tuple<Stop, GeoCoordinate>>.

Обратите внимание, что большую часть времени вы можете пропустить .ToList(), вы не получите List<T>,но IEnumerable<T>.В большинстве случаев это будет работать как List, но вашей программе не нужно постоянно копировать все в списки.Обычно это немного эффективнее, и вам не нужно постоянно вводить .ToList().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...