Dan*_*ell 2 .net c# collections list
不确定标题,但我有这个任务,我遇到了麻烦.
我有一个从WCF服务下载的列表.
即:
List<Stops_edited_small> StopsList = new List<Stops_edited_small>(e.Result);
Run Code Online (Sandbox Code Playgroud)
该清单有几个项目
两个是:
LatitudeField
LongitudeField
Run Code Online (Sandbox Code Playgroud)
基本上,我需要做的是通过这样做为列表中的每个记录创建一个Geocoordinate值:
GeoCoordinate(Convert.ToDouble(LatitudeField), Convert.ToDouble(LongitudeField));
Run Code Online (Sandbox Code Playgroud)
然后在新列表中的每个记录中添加Geocoordinate值,然后我可以使用它.
合理?我不确定我会怎么做.我是否需要某种foreach循环来对我的原始列表进行Geocoordinate转换?我是否必须先将它转换成一个类才能做到这一点?
谢谢,任何帮助或思考的欢迎.
(编辑:只是添加这个是在Windows手机上,所以.net 4可用)
在Linq引入之前,您可以使用返回.NET 2.0的ConvertAll方法.
这是一个例子:
在.NET 2.0中将List <int>转换为List <string>
和MSDN文章:
http://msdn.microsoft.com/en-us/library/73fe8cwf.aspx
如果您使用的是.NET 3.5或更高版本,则可以使用LINQ2Objects
var coordinateList = StopsList.Select(stop =>
new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
Convert.ToDouble(stop.LongitudeField))).ToList();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是较旧的.NET版本,则需要使用显式循环.
var coordinateList = new List<GeoCoordinate>();
foreach(var stop in StopsList)
{
coordinateList.Add(
new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
Convert.ToDouble(stop.LongitudeField)));
}
Run Code Online (Sandbox Code Playgroud)
编辑
如果你想将新的GeoCoordinate和停止结合起来,你有几个选择.
创建一个匿名类型的列表
var combinedList = StopsList.Select(stop =>
new {
s = stop,
coord = new GeoCoordinate(Convert.ToDouble(stop.LatitudeField),
Convert.ToDouble(stop.LongitudeField)),
}).ToList();
Run Code Online (Sandbox Code Playgroud)
您也可以对您创建的类进行相同操作,替换new {为new YourClass {.
您也可以使用上述Zip两个列表中的方法
var combinedList = StopsList.Zip(coordinateList, Tuple.Create).ToList();
Run Code Online (Sandbox Code Playgroud)
这给你一个List<Tuple<Stop, GeoCoordinate>>.
请注意,大部分时间你可以跳过.ToList(),你没有得到List<T>,但是IEnumerable<T>.List在大多数情况下,这将与大多数情况一样好,但是您的程序不必一直将所有内容复制到列表中.通常效率更高一点,您不需要一直打字.ToList().
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |