Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# I';我无法为列表指定初始大小<;T>;班级_C#_C# 4.0 - Fatal编程技术网

C# I';我无法为列表指定初始大小<;T>;班级

C# I';我无法为列表指定初始大小<;T>;班级,c#,c#-4.0,C#,C# 4.0,我正在尝试初始化对象列表(类型为Rep)。下面是我用来初始化列表的代码: public static List<Rep> Reps = new List<Rep>(new Rep[6]); 我发现一个空引用异常。我做错了什么?我找不到任何有关设置列表初始大小的Msdn文档。您的列表已初始化为6个空引用 您必须为每个职位分配一个新的Rep 尝试: 公共静态列表代表= 新列表(新代表[]{ 新代表(), 新代表(), 新代表(), 新代表(), 新代表(

我正在尝试初始化对象列表(类型为Rep)。下面是我用来初始化列表的代码:

        public static List<Rep> Reps = new List<Rep>(new Rep[6]);  

我发现一个空引用异常。我做错了什么?我找不到任何有关设置列表初始大小的Msdn文档。

您的列表已初始化为6个空引用

您必须为每个职位分配一个新的
Rep

尝试:

公共静态列表代表=
新列表(新代表[]{
新代表(),
新代表(),
新代表(),
新代表(),
新代表(),
新的Rep()});

我认为您可能会遇到null引用异常,因为Repository.Reps[repnum]在您尝试设置Main属性的值时为null。您所做的是创建一个大小为6的代表数组,但该数组中您对列表的所有引用都为空。尝试新建一个Rep对象,并在其中设置其主要属性,如下所示:

 Repository.Reps[repnum].Main = new TextRange(richTextBox1.Document.ContentStart,
 richTextBox1.Document.ContentEnd).Text;
Rep newRep = new Rep();
newRep.Main = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;

Repository.Reps[repnum] = newRep;
如果您的初衷是让列表中的所有值都为null,那么使用构造函数并以这种方式创建列表可能会更简单:

public static List<Rep> Reps = new List<Rep>(6);
public static List<Rep> Reps = new List<Rep>() 
{
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep()
};
publicstaticlist Reps=新列表(6);
但是,如果您希望在创建列表时列表包含非空对象,则可以通过以下方式创建列表:

public static List<Rep> Reps = new List<Rep>(6);
public static List<Rep> Reps = new List<Rep>() 
{
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep(),
    new Rep()
};
publicstaticlist Reps=newlist()
{
新代表(),
新代表(),
新代表(),
新代表(),
新代表(),
新代表()
};

初始大小设置正确,问题出在列表中的内容

表达式
new Rep[6]
创建了一个包含六个条目的数组,但它不会为这些条目创建
Rep
实例,而是将它们设置为null

因此,您将得到一个包含六个空引用的列表,而不是一个包含六个
Rep
实例引用的列表。当您尝试使用列表中某个项的
Main
属性时,会出现空引用异常

如果要创建实例,必须专门创建它们:

public static List<Rep> Reps = new List<Rep>() {
  new Rep(),
  new Rep(),
  new Rep(),
  new Rep(),
  new Rep(),
  new Rep()
};
publicstaticlist Reps=newlist(){
新代表(),
新代表(),
新代表(),
新代表(),
新代表(),
新代表()
};

以下是使用LINQ用新创建的
Rep
对象实例填充列表的另一种方法:

var reps = (from n in Enumerable.Range(0, 6)
            select new Rep()).ToList()
这将生成一个从0到5的数字序列(使用
Enumerable.Range
),然后为每个数字创建一个
Rep
的新实例(请注意,我们实际上不需要数字
n
任何地方-它只用于创建长度为6的初始序列。然后我们可以使用
ToList
IEnumerable
序列转换为
列表
类型

或者显式使用lambda函数(请注意,
是C#中变量的有效名称,但它提供了一个很好的语法,表明我们实际上忽略了参数):


您指的是
Rep
类型的对象列表。这与导致空引用异常的原因并不完全相关,但您是否为Reps中的所有对象(可能在for或foreach循环中)将Main属性设置为TextRange?仅对其中一个对象不适用。