2010-02-04 56 views
4

我如何可以插入一个新的对象,以匿名数组?我如何可以插入一个新的对象,以匿名数组?

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

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

我把它转换到列表。插入一个新的对象。

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

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

但我不能分配到另一个列表变量。

List newV = v.ToList(); 

回答

5

.ToList()产生一个新的列表对象,将输入源的所有元素,您的阵列,进去。因此,原始数组完全没有改变。

不能元素添加到现有的阵列,它有一个固定的大小,你唯一可以做的事情就是把一个新的数组转换变量。

我还没有尝试过,但试试这个:

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

但是,请注意,在这一点上,你应该看看你为什么要摆在首位使用匿名类型,我会认真考虑只是创建一个命名的类型,并使用一个列表开始。

请注意,你不能写List l = v.ToList();作为列表的类型是通用的(它会返回一些List<some-anonymous-type-here>,不只是List,随着匿名类型,你需要使用var

1

它不是一个“清单”但通用的清单上键入您的匿名类型。正因为如此,你将不能够明确地写出来的类型进行此操作。您必须使用“无功newV = v.ToList()”或键入它作为一个IEnumerable,这是一种非泛型接口,泛型列表实现。

您的加入新的项目可能不会做你认为,无论是上面的代码。现在它是不添加新项v,但创建一个新的列表,添加项目到该列表,然后在列表中了,因为你没有提到它。您需要将v转换为列表,然后添加项目。

-1

其实你应该可以。为了您的匿名V阵列上面,你可以添加一个新的项目如下:

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

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

在添加新项目,你可以通过下面的代码进行验证,例如

相关问题