将带有对象列表的对象添加到列表中

时间:2014-08-16 19:42:45

标签: c# wpf object observablecollection

尝试将对象添加到列表时遇到了一些问题。我在c#工作。

具有对象列表的对象:

public class Person 
{
    public string Title { get; set; }
    public List<Names> FullNames { get; set; }
}

名称 对象

public class Names
{
    string First { get; set; }
    string Middle { get; set; }
    string Last { get; set; }

    public Names(string First, string Middle, string Last)
    {
        this.First = First;
        this.Middle = Middle;
        this.Last = Last;
    }
}

问题区域:

在MainWindow中,我创建了一个Person类型的Observable Collection。如何正确实现添加 FullNames 列表?我根本无法让它发挥作用。

public partial class MainWindow : Window
{

    public ObservableCollection<Person> people { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        people.Add(new Person() { Title = "President", FullNames = new Names(First = "George", Middle = "K", Last = "Will")}); //problem area
    }
}

2 个答案:

答案 0 :(得分:3)

好吧,还有一些事情。

  1. 你有NullReferenceException等待发生。 people初始化为null,您可以直接向其添加,而不会为其提供实例。
  2. 您有一个包含Person个对象的集合,并且您正在为其添加TodoItem。其中一个是错误的。
  3. 您真正的问题是,您需要使用List属性上的FullNames初始值设定项,因为看起来就像您尝试设置{{1}这没有任何意义。
  4. 您正在使用List<T> = T调用Names的构造函数,这是一种错误的语法。您想省略参数名称。正如@RohitVats指出的那样,您也可以使用=来指定,但在这里您真的不想这样做。构造函数实际上只是一个方法调用,因此相同的语法规则适用于任何其他函数(大多数情况下)。
  5. 要解决这些问题,您的代码应如下所示:

    :

    为了确保你理解这里发生了什么,这与写作相同:

    public MainWindow()
    {
        InitializeComponent();
    
        people = new ObservableCollection<Person>();
        people.Add(new Person()
                   {
                       Title = "President",
                       FullNames = new List<Names>()
                                   {
                                       new Names("George", "K", "Will")
                                   }
                   });
    }
    

    这个不是bug,但是您应该考虑将public MainWindow() { InitializeComponent(); people = new ObservableCollection<Person>(); Person toAdd = new Person(); toAdd.Title = "President"; toAdd.FullNames = new List<Names>(); toAdd.FullNames.Add(new Names("George", "K", "Will")); people.Add(toAdd); } 类型名称调整为单数,即使只是Names,因为它很难按原样阅读。我得到了你来自的地方,因为实际上有多个名字(第一,中间和最后),但它仍然令人困惑。

答案 1 :(得分:2)

  1. 首先初始化人员列表。
  2. 您只能在集合中添加Person对象。
  3. 名称应初始化为列表。
  4. 带参数的构造函数调用不正确。
  5. 而不是First = "George",它应该是First : "George",或者只是在传递与定义相同的顺序时完全省略参数名称。


    这应该有效:

    people.Add(new Person() { Title = "President",
                              FullNames = new List<Names>()
                                  { new Names("George", "K", "Will") } });