【问题标题】:How can i insert a new object to anonymous array?如何将新对象插入匿名数组?
【发布时间】:2011-01-28 05:15:35
【问题描述】:

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

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 });

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

但我不能分配给另一个 List 变量。

List newV = v.ToList();

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    .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

    【讨论】:

      【解决方案2】:

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

      您上面添加新项目的代码也可能与您想的不一样。现在它不是向 v 添加一个新项目,而是创建一个新列表,向该列表添加一个项目,然后该列表消失了,因为您没有引用它。您需要将 v 转换为列表,然后添加项目。

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-03
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 1970-01-01
          • 2020-03-30
          • 2016-03-06
          相关资源
          最近更新 更多