【问题标题】:Convert List<> or List<List<>>转换 List<> 或 List<List<>>
【发布时间】:2020-05-17 12:17:15
【问题描述】:

我需要将一种类类型的点(此类型来自第 3 方 api)转换为我自己制作的另一种类类型的点。

以下作品:

MyPointClass myPnt = new MyPointClass(ApiPointClass apiPnt);


public class MyPointClass
{
    public double X { get; private set; } = 0;
    public double Y { get; private set; } = 0;
    public double Z { get; private set; } = 0;

    public MyPointClass(ApiPointClass apiPnt)
    {
         //X, Y, Z values of MyPointClass are determined and stuffed into properties.
    }
}

有没有一种简单的方法可以在没有循环的情况下转换以下内容?

    List<ApiPointClass>
or
    List<List<ApiPointClass>>
or
    ApiPointClass[]

谢谢。

【问题讨论】:

  • 没有循环就不可能处理任何类型的集合。有时您可以避免自己编写循环,但会有一个循环 - 不问任何问题。
  • 没有 Linq 命令或类似的东西,然后呢?
  • 自动映射器可能会有所帮助
  • @EdwardBagby Linq 将为您完成循环。它仍然——当然——做一个循环。
  • @Christopher 够公平的。我想我应该更明确地说“......所以我不需要写一个循环。”

标签: c# list arraylist converters


【解决方案1】:

假设您有一个名为 apiPnts 的 IEnumerable,如果您引用 System.Linq,您可能会这样做

apiPnts.Select(point => new MyPointClass(point)).ToList();

point 变量是 ApiPointClass 的对象,Select 在内部进行迭代。

在这种情况下,这将返回 MyPointClass 的列表。

参考:https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.select?view=netframework-4.8

它适用于数组或列表,但不适用于列表列表。列表列表会有所不同。

【讨论】:

  • 我会试一试并报告。
  • 对于列表列表,您只需使用SelectMany(l =&gt; l.Select(p =&gt; new MyPointClass(p))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2019-05-20
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多