C# I';我无法为列表指定初始大小<;T>;班级
我正在尝试初始化对象列表(类型为Rep)。下面是我用来初始化列表的代码: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 尝试: 公共静态列表代表= 新列表(新代表[]{ 新代表(), 新代表(), 新代表(), 新代表(), 新代表(
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?仅对其中一个对象不适用。