我正在尝试初始化对象列表(其类型为Rep).这是我用来初始化列表的代码:
public static List<Rep> Reps = new List<Rep>(new Rep[6]);
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试为列表的一个类中的字符串赋值时,如下所示:
Repository.Reps[repnum].Main = new TextRange(richTextBox1.Document.ContentStart,
richTextBox1.Document.ContentEnd).Text;
Run Code Online (Sandbox Code Playgroud)
我是一个空引用异常.我究竟做错了什么?我找不到任何关于设置列表初始大小的Msdn文档.
我想您可能会得到空引用异常,因为当您尝试设置Main属性的值时,Repository.Reps [repnum]为null.你在做什么是创建一个大小为6的Reps数组,但是你给List的那个数组中的所有引用都是null.尝试新建一个Rep对象并在其中设置它的Main属性,如下所示:
Rep newRep = new Rep();
newRep.Main = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
Repository.Reps[repnum] = newRep;
Run Code Online (Sandbox Code Playgroud)
如果您的意图是让List中的所有值一开始为null,那么使用List(int)构造函数并以这种方式创建List 可能更简单:
public static List<Rep> Reps = new List<Rep>(6);
Run Code Online (Sandbox Code Playgroud)
但是,如果您的目的是在创建List时包含非null对象,则可以通过以下方式创建List:
public static List<Rep> Reps = new List<Rep>()
{
new Rep(),
new Rep(),
new Rep(),
new Rep(),
new Rep(),
new Rep()
};
Run Code Online (Sandbox Code Playgroud)
下面是Rep使用LINQ 用新创建的对象实例填充列表的另一种方法:
var reps = (from n in Enumerable.Range(0, 6)
select new Rep()).ToList()
Run Code Online (Sandbox Code Playgroud)
这将生成一个从0到5(使用Enumerable.Range)的数字序列,然后Rep为每个数字创建一个新实例(请注意,我们实际上并不需要n任何数字- 它仅用于创建一些长度为6的初始序列然后我们可以ToList用来将IEnumerable序列转换为List<Rep>类型.
或者明确地使用lambda函数(注意它_是C#中变量的有效名称,但它给我们一个很好的语法,表明我们实际上忽略了参数):
var reps = Enumerable.Range(0, 6).Select(_ => new Rep()).ToList()
Run Code Online (Sandbox Code Playgroud)