需要将参数添加到 NewActionConfiguration 但不能在定义中使用 foreach

Need to add Parameters to NewActionConfiguration but cant use a foreach inside the definition

使用 Axis Communications VAPIX WSDL APIs - 我正在设置一个 NewActionConfiguration,它采用我保存在列表中的一些参数,但方式API 文档有实现 我无法在定义 newAction 对象时循环遍历参数列表 XML 对象。

//This is how the API docs say to do it:
NewActionConfiguration newAction = new NewActionConfiguration
{
    TemplateToken = overlayToken,
    Name = "Overlay Text",
    Parameters = new ActionParameters
    {
        Parameter = new[]
        {
            new ActionParameter { Name = "text", Value = "Trigger:Active" },
            new ActionParameter { Name = "channels", Value = "1" },
            new ActionParameter { Name = "duration", Value = "15" }
         }
     }
};

//This is what I need to do:
 NewActionConfiguration newAction = new NewActionConfiguration
 {
     Name = xmlPrimaryAction["Name"].InnerText,
     TemplateToken = xmlPrimaryAction["ActionTemplate"].InnerText,
     Parameters = new[]
     {
         foreach (ActionParameter actionParameter in actionParameterList)
         {
             new ActionParameter { Name = actionParameter.Name, Value = actionParameter.Value };
          }
      }
};

API 不允许我只做: newAction.Parameters.Parameter.Add(actionParameter) 之类的。有人有什么想法吗?

所以首先,您不能在对象实例化范围块内声明 foreach 块。您需要做的是在函数作用域中声明一个变量,然后将参数 属性 赋予它。像这样:

var actionParameters = new List<ActionParameter>();
foreach (ActionParameter actionParameter in actionParameterList)
     {
         actionParameters.Add(new ActionParameter { Name = actionParameter.Name, Value = actionParameter.Value });
      }
NewActionConfiguration newAction = new NewActionConfiguration
 {
     Name = xmlPrimaryAction["Name"].InnerText,
     TemplateToken = xmlPrimaryAction["ActionTemplate"].InnerText,
     Parameters = actionParameters.ToArray()//Use System.Linq here to convert the list into an array
};

找到了!感谢@Vitor 的帮助,你很接近,但在我发现这个之后学会了如何将我的列表作为我的对象:Convert List to object[]

这是最终起作用的方法:

var actionParameterList = new List<ActionParameter>();
foreach (XmlNode xmlParameter in xmlActionParameters)
{
    ActionParameter actionParameter = new ActionParameter();
    actionParameter.Name = xmlParameter["Name"].InnerText;
    actionParameter.Value = xmlParameter["Value"].InnerText;
    actionParameterList.Add(new ActionParameter { Name = actionParameter.Name, Value = actionParameter.Value });
}
 NewActionConfiguration newAction = new NewActionConfiguration
 {
     Name = xmlPrimaryAction["Name"].InnerText,
     TemplateToken = xmlPrimaryAction["ActionTemplate"].InnerText,
     Parameters = new ActionParameters
     {
         Parameter = actionParameterList.Cast<ActionParameter>().ToArray()
     }
 };