不确定标题,但我有这个任务,我遇到了麻烦。
我有一个从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可用)
答案 0 :(得分:7)
您可以使用在引入Linq之前返回到.NET 2.0的ConvertAll方法。
以下是一个例子:
Cast List<int> to List<string> in .NET 2.0
和MSDN文章:
答案 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()
。