2011-10-02 38 views
2

确实是标题,但我有这个任务,我遇到了麻烦。使用中间方法将c#列表传输到另一个列表中

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

即:

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

名单有几个项目

两个分别是:

LatitudeField 
LongitudeField 

基本上,我需要做的是做一个会有地理座标值列表中的每个记录通过这样做:

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

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

有意义吗? 我不确定我会如何去做这件事。 我需要某种foreach循环在我的原始列表上进行地理坐标转换吗?我是否必须首先将其转换为班级才能做到这一点?

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

(编辑:我想补充这是在Windows Phone上,所以.NET 4可用)

回答

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 YourClass {更换new {

您也可以同时使用上述清单

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

这给你一个List<Tuple<Stop, GeoCoordinate>>使用Zip方法。

请注意,大多数时候你可以跳过.ToList(),你没有得到List<T>,而是IEnumerable<T>。在大多数情况下,这将与List一样好,但是您的程序不必一直将所有内容都复制到列表中。通常效率更高一些,你不需要一直输入.ToList()

+0

谢谢,这是非常有用的。我认为我在那里一半,因为我可能需要创建一个新列表,并将旧列表中的值与这个新列表中的值相结合。所以基本上我的旧名单中也有这个地理坐标值。谢谢。 –

+0

谢谢,我使用了新的YourClass位的第一个建议:-)的作品! –

相关问题