我试图理解将数组参数传递给方法并在C#中创建动态数组。我最后有2个问题。
这个LINQ to XML语句运行良好:
XDocument doc = new XDocument(
new XElement("Processes",
from p in Process.GetProcesses()
orderby p.ProcessName
select (new XElement("Process",
new XAttribute("Name", p.ProcessName),
new XAttribute("PID", p.Id)))));
我想以不同的方式重写它以理解传递数组的概念,但它在最后一行产生一个InvalidOperationException:
var query = from p in Process.GetProcesses()
orderby p.ProcessName
select p;
List<XElement> content = new List<XElement>();
foreach (var item in query)
{
content.Add(new XElement("Process",
new XAttribute("Name", item.ProcessName),
new XAttribute("PID", item.Id)));
}
// Is there any other way to create dynamic array instead of using List
// and converting it to Array?
var paramArr = content.ToArray();
XDocument doc = new XDocument(paramArr);
我有两个问题:
我应该如何将数组参数传递给此方法或类似方法:public XDocument(params Object [] content)?
有没有其他方法可以在C#中创建动态数组而不使用list并转换为Array?
答案 0 :(得分:2)
你的第二个代码将一个元素“Processes”放入XDocument,但第二个代码放置了许多元素。 XDocument可以包含零个或一个元素。
请参阅Valid Content of XElement and XDocument Objects。
示例:
var query = from p in Process.GetProcesses()
orderby p.ProcessName
select p;
List<XElement> content = new List<XElement>();
foreach (var item in query)
{
content.Add(new XElement("Process",
new XAttribute("Name", item.ProcessName),
new XAttribute("PID", item.Id)));
}
var paramArr = content.ToArray();
var rootElement = new XElement("Processes", paramArr); // create one root element
XDocument doc = new XDocument(rootElement);
http://msdn.microsoft.com/en-us/library/bb352589.aspx中的第二个示例放置一个元素和一个注释,而不是两个元素。
答案 1 :(得分:0)
关于第一个问题,请查看this question。 Documentation is here。我认为您可以通过将数组转换为对象来解决问题:
XDocument doc = new XDocument((object)paramArr);
第二个问题:不是.C#中的数组具有恒定的长度。