如何将新对象插入匿名数组?

时间:2010-02-04 13:31:01

标签: c# linq

如何将新对象插入匿名数组?

var v = new[]
            {
                new {Name = "a", Surname = "b", Age = 1},
                new {Name = "b", Surname = "c", Age = 2}
            };

我首先知道我们设置数组的限制(大小)。

我将它转换为List。插入新对象。

v.ToList().Add(new { Name = "c", Surname = "d", Age = 3 });

但我仍然在v变量中有2个元素。第三个元素去了哪里?

但是我无法分配给另一个List变量。

List newV = v.ToList();

3 个答案:

答案 0 :(得分:7)

.ToList()生成一个新的列表对象,将输入源的所有元素(数组)添加到其中。因此,原始数组根本不会改变。

您无法向现有数组添加元素,它具有固定大小,您唯一能做的就是将新数组放回变量中。

我没试过,但试试这个:

var l = v.ToList();
l.Add(...); // your existing add code
v = l.ToArray();

但是,请注意,此时您应该首先查看为什么要使用匿名类型,我会认真考虑创建一个命名类型,然后使用列表开始。

请注意,您无法编写List l = v.ToList();,因为列表的类型是通用的(它将返回一些List<some-anonymous-type-here>,而不只是List。对于匿名类型,您需要使用{{ 1}}。

答案 1 :(得分:1)

它不是“列表”,而是在匿名类型上键入的通用列表。因此,您将无法为此操作明确写出类型。您必须使用“var newV = v.ToList()”或将其键入为IEnumerable,这是通用列表实现的非通用接口。

您添加新项目的上述代码可能也没有按照您的想法执行。现在它没有向 v 添加新项目,而是创建新列表,向该列表添加项目,然后列表因为您没有引用而消失。您需要将v转换为列表,然后添加项目。

答案 2 :(得分:-1)

其实你应该可以。对于上面的匿名v数组,您可以添加以下新项:

v[2] = new {Name = "c", Surname = "d", Age = 3};

添加新项目后,您可以通过以下代码行验证它:

MessageBox.Show(v[2].ToString());