3

我想从其他元素列表中填充我的类型数组。所有这些我都想在 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))
}

有人可以帮我吗?

4

4 回答 4

5

数组没有Add方法,因为它无法调整大小。因此,要么也使用列表中的 a List,使用LINQ's ToArray,要么正确调整数组的大小并使用for-loop。

linq 方法是:

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

名单:

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

或者

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

循环数组方法:

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();
于 2013-10-18T09:11:55.470 回答
1

如果你真的不想做 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);
于 2013-10-18T09:36:25.100 回答
0

您可以使用 Linq:

Parameter[] parametersToInput = parametersWindow.Parameters
                                     .Select(p => 
                                        new Parameter() { 
                                           Name = p.Name, Value = p.Value })
                                     .ToArray();
于 2013-10-18T09:20:16.640 回答
0

我错过了什么吗?你可以做到这一点是完整的 LINQ,没有循环。

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

在线的。没有剧情。

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

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

Select方法非常适合 1 对 1 类型的转换。使用 LINQ,我不知道你为什么会这样做:)

于 2013-10-18T09:19:11.857 回答