【问题标题】:How to fill array from list of other elements in foreach?如何从foreach中的其他元素列表中填充数组?
【发布时间】:2013-10-18 09:08:39
【问题描述】:

我想从其他元素列表中填充我的类型数组。所有这些我都想在 foreach 循环中完成。

有可能吗?

现在是怎么做的:

// Temp list
List<Parameter> inputData = new List<Parameter>();

// going through collection from which i want to copy
foreach (var parameter in parametersWindow.Parameters)
{
    inputData.Add(new Parameter() { Name = parameter.Name, Value = parameter.Value });
}

// Convertation to array.
Parameter[] parametersToInput = inputData.ToArray();

这就是我想要的方式:

Parameter[] parametersToInput = new Parameter[parametersWindow.Parameters.Count]

foreach (var param in parametersWindow.Parameters)
{
   // parametersToInput.add(new Parameter(parameter))
}

谁能帮帮我?

【问题讨论】:

标签: c# arrays list


【解决方案1】:

数组没有Add 方法,因为它无法调整大小。所以要么也使用List,使用列表中的LINQToArray,或者正确调整数组的大小并使用for-loop。

linq 方法是:

Parameter[] parametersToInput = parametersWindow.Parameters.ToArray();

名单:

List<Parameter> parametersToInput = parametersWindow.Parameters.ToList();

List<Parameter> parametersToInpu = new List<Parameter>(parametersWindow.Parameters);

array-for-loop 方法:

Parameter[] parametersToInput = new Parameter[parametersWindow.Parameters.Count];
for (int i = 0; i < parametersWindow.Parameters.Count; i++)
    parametersToInput[i] = parametersWindow.Parameters[i];

更新由于parametersWindow.Parameters 不是Parameter,您需要创建一个:

Parameter[] parametersToInput = parametersWindow.Parameters
    .Select(p => new Parameter {  Name = p.Name, Value = p.Value})
    .ToArray();

【讨论】:

  • 不幸的是parametersWindow.Parameters的数据不是“参数”。所以它需要某种“转换”......
  • 数组不是不可变的。也许你想说“固定大小”。
  • @AhmedKRAIEM:这是一个不幸的选择。已更正,谢谢。
  • 好的..据我了解-在这种情况下无法使用foreach..因为我需要数组,而不是列表...
  • @user2706838:编辑了我的答案。
【解决方案2】:

如果你真的不想做 Foreach 循环,你可以试试这个:

//Your List
List<Parameter> inputData = new List<Parameter>();

//Fill Your List Here    

//Your Array
Parameter[] parametersToInput = new Parameter[inputData.Count];

//Filling Your Array from Your List
int index = 0;
inputData.ForEach(e => parametersToInput[index++] = e);

【讨论】:

    【解决方案3】:

    你可以使用 Linq:

    Parameter[] parametersToInput = parametersWindow.Parameters
                                         .Select(p => 
                                            new Parameter() { 
                                               Name = p.Name, Value = p.Value })
                                         .ToArray();
    

    【讨论】:

      【解决方案4】:

      我错过了什么吗?您可以使用完整的 LINQ 执行此操作,而无需使用循环。

      Parameter[] parametersToInput = parametersWindow.Select(p => p.Parameters).ToArray();
      

      在线。没有剧情。

      如果你想进行额外的处理;

      Parameter[] parametersToInput = parametersWindow.Select(p => 
      {
          ProcessParameters(p);
          return p.Parameters;
      }).ToArray();
      

      Select 方法是一对一类型转换的理想选择。使用 LINQ,我不知道你为什么要这样做:)

      【讨论】:

      • 我知道问题要求“a foreach 循环”但 foreach 不一定是最适合这项工作的工具。
      猜你喜欢
      • 1970-01-01
      • 2020-01-29
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2021-08-03
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多