List.ToArray() - 为什么数组为空?

时间:2017-05-11 09:26:28

标签: c# arrays list

我正在编写一个包含集合的可序列化对象。因此,为了能够添加和删除该集合中的项目,我添加了首先将集合从Array转换为List,添加或删除项目然后将List转换回Array的方法。

public void AddElement(Element element) {
   List<Element> list = new List<Element>(this.elements);
   list.Add(element);
   this.elements = list.ToArray();
}

像这样创建List可能有问题吗?

列表(的 this.elements

或者是一个问题,Array在开始时长度是0?

EDIT1:从列表字段转换也会留下一个空数组。

EDIT2:不需要XML序列化。

1 个答案:

答案 0 :(得分:2)

您的代码运行正常。这是MCVE

<强> Program.cs的

using System;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new TestClass();
            test.AddElement(new Element());
            Console.WriteLine(test.HowMuch());
        }
    }
}

<强> TestClass.cs

using System.Collections.Generic;

namespace Test1
{
    class TestClass
    {
        private Element[] elements = new Element[0];

        public void AddElement(Element element)
        {
            List<Element> list = new List<Element>(this.elements);
            list.Add(element);
            this.elements = list.ToArray();
        }

        public int HowMuch()
        {
            return elements.Length;
        }
    }
}

<强> Element.cs

namespace Test1
{
    class Element
    {
    }
}

示例输出1,而不是0。

最可能的原因是您将this.elements分配给变量,因此存储旧版本的数组。