尝试将对象添加到列表时遇到了一些问题。我在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
}
}
答案 0 :(得分:3)
好吧,还有一些事情。
NullReferenceException
等待发生。 people
初始化为null,您可以直接向其添加,而不会为其提供实例。Person
个对象的集合,并且您正在为其添加TodoItem
。其中一个是错误的。List
属性上的FullNames
初始值设定项,因为看起来就像您尝试设置{{1}这没有任何意义。List<T> = T
调用Names
的构造函数,这是一种错误的语法。您想省略参数名称。正如@RohitVats指出的那样,您也可以使用=
来指定,但在这里您真的不想这样做。构造函数实际上只是一个方法调用,因此相同的语法规则适用于任何其他函数(大多数情况下)。要解决这些问题,您的代码应如下所示:
:
为了确保你理解这里发生了什么,这与写作相同:
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)
而不是First = "George"
,它应该是First : "George"
,或者只是在传递与定义相同的顺序时完全省略参数名称。
这应该有效:
people.Add(new Person() { Title = "President",
FullNames = new List<Names>()
{ new Names("George", "K", "Will") } });