C# 需要向NewActionConfiguration添加参数,但不能在定义中使用foreach

C# 需要向NewActionConfiguration添加参数,但不能在定义中使用foreach,c#,arrays,xml,foreach,axis2,C#,Arrays,Xml,Foreach,Axis2,使用Axis Communications VAPIX WSDL API-我正在设置一个NewActionConfiguration,它接受我保存在列表中的许多参数,但API文档实现的方式在定义newAction对象时无法循环通过参数列表XML对象 //This is how the API docs say to do it: NewActionConfiguration newAction = new NewActionConfiguration { TemplateToken =

使用Axis Communications VAPIX WSDL API-我正在设置一个
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块。您需要做的是在函数范围之前声明一个变量,然后将Parameter属性赋给它。像这样:

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
};
var actionParameters=new List();
foreach(actionParameterList中的ActionParameter ActionParameter)
{
添加(新的ActionParameter{Name=ActionParameter.Name,Value=ActionParameter.Value});
}
NewActionConfiguration newAction=新的NewActionConfiguration
{
Name=xmlPrimaryAction[“Name”]。InnerText,
TemplateToken=xmlPrimaryAction[“ActionTemplate”]。InnerText,
Parameters=actionParameters.ToArray()//在此处使用System.Linq将列表转换为数组
};

找到了!感谢@Vitor的帮助,您很接近,但在我发现以下内容后,您学会了如何将我的列表作为我的对象:

以下是最终奏效的方法:

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()
     }
 };
var actionParameterList=new List();
foreach(xmlActionParameters中的XmlNode xmlParameter)
{
ActionParameter ActionParameter=新的ActionParameter();
actionParameter.Name=xmlParameter[“Name”].InnerText;
actionParameter.Value=xmlParameter[“Value”].InnerText;
actionParameterList.Add(新的ActionParameter{Name=ActionParameter.Name,Value=ActionParameter.Value});
}
NewActionConfiguration newAction=新的NewActionConfiguration
{
Name=xmlPrimaryAction[“Name”]。InnerText,
TemplateToken=xmlPrimaryAction[“ActionTemplate”]。InnerText,
参数=新的ActionParameters
{
参数=actionParameterList.Cast().ToArray()
}
};

对不起。我有点困惑。在这种情况下,“API”到底是什么?您是否在API中编码?你在调用API吗?它的Axis Communications VAPIX WSDL API没有回答我的问题。我想我要问的是。。。这个神秘的API怎么能确定你是如何编写代码的呢?它不允许我在这个新对象的括号定义中使用foreach,我也不能一个接一个地写出参数,因为有时它可能不止3个参数,但它现在如何允许你呢?它对你如何创建代码有什么发言权?我知道你在做什么,我想。。。拍摄我不太熟悉LINQ。哦,它很简单,只是放在文件的顶部使用系统。LINQ;你可以走了。它工作了吗?错误:无法使用集合初始值设定项初始化类型
ActionParameters
,因为它没有实现
System.Collections.IEnumerable
我刚读了文档,List实现了IEnumerable接口,所以删除方法到Array应该可以工作,以便转换它