我不知道这个问题的标题是什么,也不知道搜索的关键字.
场景:我有一个模型如下
public class Message { public List<Page> Pages { get; set; }
public class Page { public List<Line> Lines { get; set; }
public class Line { public string Text {get; set; }
Run Code Online (Sandbox Code Playgroud)
当我想插入一个Line与Text = "Test"在Page1,我需要做到以下几点.
var Message = new Message();
var line = new Line { Text = "Test" };
var page = new Page();
page.Lines.Add(line);
Message.Pages.Add(page);
Run Code Online (Sandbox Code Playgroud)
问题:有没有更简单的方法来实现这一目标?例如.
Message.Pages[0].Lines[0].Text = "Test";
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:假设所有属性都在构造函数中正确实例化.
var msg = new Message {
Pages = new List<Page> {
new Page {
Lines = new List<Line> { new Line { Text = "Test" } }
}
}
};
Run Code Online (Sandbox Code Playgroud)
注意:如果列表在各自的构造函数中初始化,则可以删除这些new List<>位:
var msg = new Message {
Pages = {
new Page {
Lines = { new Line { Text = "Test" } }
}
}
};
Run Code Online (Sandbox Code Playgroud)
你也可以从添加的隐式转换操作符string来Line,在这种情况下:
var msg = new Message {
Pages = {
new Page {
Lines = { "Test" }
}
}
};
Run Code Online (Sandbox Code Playgroud)
编辑:完整的工作示例,包括操作符和ctor初始化,以及多个页面(请参阅注释):
using System.Collections.Generic;
public class Message {
public List<Page> Pages { get; private set; }
public Message() { Pages = new List<Page>(); }
}
public class Page {
public List<Line> Lines { get; private set; }
public Page() { Lines = new List<Line>(); }
}
public class Line {
public string Text { get; private set; }
public static implicit operator Line(string value) {
return new Line { Text = value };
}
}
static class Program {
static void Main() {
var msg = new Message {
Pages = {
new Page {
Lines = { "Test" }
},
new Page {
Lines = {
"On another page",
"With two lines"
},
}
}
};
}
}
Run Code Online (Sandbox Code Playgroud)