我无法为List <T>类分配初始大小

Jus*_*tin 2 c# c#-4.0

我正在尝试初始化对象列表(其类型为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文档.

Cor*_*old 5

我想您可能会得到空引用异常,因为当您尝试设置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)


Tom*_*cek 5

下面是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)