使用其间的方法将c#List传输到另一个列表

时间:2011-10-02 12:07:59

标签: c# .net list collections

不确定标题,但我有这个任务,我遇到了麻烦。

我有一个从WCF服务下载的列表。

即:

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

该列表有几个项目

两个是:

LatitudeField
LongitudeField

基本上,我需要做的是为列表中的每条记录创建一个Geocoordinate值:

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

然后在新列表中添加每个记录中的Geocoordinate值,然后我可以使用它。

有意义吗? 我不确定我会怎么做。 我是否需要某种foreach循环来对我的原始列表进行Geocoordinate转换?我是否必须先将它转换成一个类才能做到这一点?

谢谢,任何帮助或思考的欢迎。

(编辑:只是添加这个是在Windows手机上,所以.net 4可用)

2 个答案:

答案 0 :(得分:7)

您可以使用在引入Linq之前返回到.NET 2.0的ConvertAll方法。

以下是一个例子:

Cast List<int> to List<string> in .NET 2.0

和MSDN文章:

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

答案 1 :(得分:5)

如果您使用的是.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()