【问题标题】:How do you convert a List of object to a one dimensional array?如何将对象列表转换为一维数组?
【发布时间】:2018-11-23 09:06:45
【问题描述】:

我有一个如下所示的对象列表:

 public class Hub
    {
        public string Stamp { get; set; }
        public string Latency0 { get; set; }
        public string Latency1 { get; set; }
        public string Latency2 { get; set; }
        public string Latency3 { get; set; }
        public string Latency4 { get; set; }
    }

我将此列表转换为 Json 后,如下图所示。

如何将列表转换为图像中显示的数组?我应该能够创建一个 C# 数组,我可以将其进一步转换为图像中显示的 Json 数组。

我尝试在列表中使用此ToArray(),但它仅将其转换为对象数组。

【问题讨论】:

标签: c# arrays .net linq


【解决方案1】:

如果您可以将值保留为字符串,那么 Aomine 的答案很好。但是,您的屏幕截图似乎表明您实际上需要将这些值转换为数字。由于这些可以有小数并且可以为空,decimal? 是您需要的类型。

从创建这个辅助方法开始:

decimal? ParseOrNull(string value)
{
    decimal numericValue;
    return decimal.TryParse(value, out numericValue) ? numericValue : (decimal?)null;
}

然后:

hubs.Select(h => 
    new [] { h.Stamp, h.Latency0, h.Latency1, h.Latency2, h.Latency3, h.Latency4 }
            .Select(ParseOrNull).ToArray())
    .ToArray()

【讨论】:

  • 我认为OP的json示例显示Latency值应该是一个字符串latency1: "120.02",如果你序列化十进制值输出将是latency1: 120.02
【解决方案2】:
source.Select(x => new string[]{
             x.Stamp, x.Latency0, x.Latency1,
             x.Latency2, x.Latency3, x.Latency4})
      .ToArray();

【讨论】:

    【解决方案3】:

    Aomine 是对的,但是如果你想将结果作为双精度数组(或者实际上可以为空的双精度),你需要像这样进行转换:

    double temp;
    source.Select(x => new string[]{
                 x.Stamp, x.Latency0, x.Latency1, x.Latency2, x.Latency3, x.Latency4}
                .Select(n => double.TryParse(n, out temp) ? temp : (double?)null))
         .ToArray();
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多