0

我试图了解将数组参数传递给方法并在 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);

我有两个问题:

  1. 我应该如何将数组参数传递给此方法或类似方法:public XDocument(params Object[] content)?

  2. 有没有其他方法可以在 C# 中创建动态数组而不使用列表和强制转换为数组?

4

2 回答 2

3

您的第二个代码将一个元素“进程”放入 XDocument,但第二个代码放入了许多元素。XDocument 可以包含零个或一个元素。

请参阅XElement 和 XDocument 对象的有效内容

例子:

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中的第二个示例放置了一个元素和一个注释,而不是两个元素。

于 2013-09-29T13:11:14.347 回答
0

对于您的第一个问题,请查看此问题文档在这里。我认为您的问题可以通过将数组转换为对象来解决:

XDocument doc = new XDocument((object)paramArr);

第二个问题:不。C# 中的数组具有恒定长度。

于 2013-09-29T12:59:03.847 回答