我不确定标题,但我有这个任务,我遇到了麻烦。
我有一个从WCF服务下载的列表。
即:
List<Stops_edited_small> StopsList = new List<Stops_edited_small>(e.Result);该列表有几个项目
两个是:
LatitudeField
LongitudeField基本上,我需要做的是通过这样做为列表中的每条记录创建一个地理坐标值:
GeoCoordinate(Convert.ToDouble(LatitudeField), Convert.ToDouble(LongitudeField));然后将每条记录中的地理坐标值添加到一个新列表中,然后我就可以使用它了。
讲得通?我不确定我将如何做这件事。我需要某种foreach循环来对我的原始列表进行地理坐标转换吗?我必须先把它转换成一个类才能这样做吗?
谢谢,欢迎任何帮助或想法。
(编辑:只是补充一下,这是在windows phone上,所以.net 4是可用的)
发布于 2011-10-02 20:11:00
如果您使用的是.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()。
发布于 2011-10-02 20:25:20
您可以使用在引入LINQ2.0之前就回到.NET 2.0的ConvertAll方法。
下面是一个示例:
和MSDN文章:
http://msdn.microsoft.com/en-us/library/73fe8cwf.aspx
https://stackoverflow.com/questions/7626212
复制相似问题