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

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可用)

Jah*_*ine 7

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

这是一个例子:

在.NET 2.0中将List <int>转换为List <string>

和MSDN文章:

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


Alb*_*nbo 5

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