尝试在 C# 中的 class 中将项目添加到列表 属性 时出现运行时错误
Runtime error when trying to add item to list property in a class in C#
我有一个 class 和一个 属性 ,它是要在运行时填充的 enum
值的列表(我使用列表而不是数组,因为我不'事先知道会有多少项目)。
我这样声明 属性:
public class Entity
{
// ...
public List<FooEnum> FooList { get; set; }
// ...
}
其中 FooEnum
具有以下结构:
public enum FooEnum
{
[Description( "Foo: " )]
Foo = 1,
[Description( "Boo: " )]
Boo = 3,
[Description( "Loo: " )]
Loo,
//...
}
为了将项目添加到列表,我将以下方法添加到实体 class:
public void SetFoos( string packet )
{
VectorSize = short.Parse( ExtractValue( packet, "ListSize: " ) );
for( int i = 0, start = packetIndexOf( "ListSize" ); i < VectorSize; i++ )
{
string reducedPacket = packet.Substring( start );
string currentFoo = ExtractValue( packet, "--------------\r\n" );
foreach( FooEnum foo in FooEnum.GetValues( typeof( FooEnum ) ) )
{
if( foo.Description().StartsWith( currentFoo ) ) { FooList.Add(foo); break; }
}
}
}
我还没有实现启动更新逻辑,因为我想测试一个 VectorSize 为 1 的例子,但是当 运行 程序出现运行时错误:
System.NullReferenceException : Object reference undefined for object instance
我试图将列表声明为 public List<FooEnum> FooList = new List<FooEnum>();
,但我立即收到警告,告诉我
Field "Entity.FooList" is never atributted and will always have a default null value
所以我又开始使用 getter 和 setter。
我试图在 C# 中找到一些 List 属性的示例,并基于它们尝试将我的声明更改为
public class Entity
{
// ...
private List<FooEnum> fooList;
public List<FooEnum> FooList
{
get { return fooList; }
set { fooList = value; }
}
// ...
}
但我遇到了同样的运行时错误。
我错过了什么?不能将枚举列表用作 class 属性 吗?
您需要在添加 foo 之前初始化您的 fooList,如下所示:
fooList = new List<FooEnum>();
向您的 Entity
class 添加构造函数并初始化 FooList
或 foolist
如下所示
public class Entity
{
public List<FooEnum> FooList { get; set; }
// ctor
public Entity()
{
FooList = new List<FooEnum>();
}
}
我有一个 class 和一个 属性 ,它是要在运行时填充的 enum
值的列表(我使用列表而不是数组,因为我不'事先知道会有多少项目)。
我这样声明 属性:
public class Entity
{
// ...
public List<FooEnum> FooList { get; set; }
// ...
}
其中 FooEnum
具有以下结构:
public enum FooEnum
{
[Description( "Foo: " )]
Foo = 1,
[Description( "Boo: " )]
Boo = 3,
[Description( "Loo: " )]
Loo,
//...
}
为了将项目添加到列表,我将以下方法添加到实体 class:
public void SetFoos( string packet )
{
VectorSize = short.Parse( ExtractValue( packet, "ListSize: " ) );
for( int i = 0, start = packetIndexOf( "ListSize" ); i < VectorSize; i++ )
{
string reducedPacket = packet.Substring( start );
string currentFoo = ExtractValue( packet, "--------------\r\n" );
foreach( FooEnum foo in FooEnum.GetValues( typeof( FooEnum ) ) )
{
if( foo.Description().StartsWith( currentFoo ) ) { FooList.Add(foo); break; }
}
}
}
我还没有实现启动更新逻辑,因为我想测试一个 VectorSize 为 1 的例子,但是当 运行 程序出现运行时错误:
System.NullReferenceException : Object reference undefined for object instance
我试图将列表声明为 public List<FooEnum> FooList = new List<FooEnum>();
,但我立即收到警告,告诉我
Field "Entity.FooList" is never atributted and will always have a default null value
所以我又开始使用 getter 和 setter。
我试图在 C# 中找到一些 List 属性的示例,并基于它们尝试将我的声明更改为
public class Entity
{
// ...
private List<FooEnum> fooList;
public List<FooEnum> FooList
{
get { return fooList; }
set { fooList = value; }
}
// ...
}
但我遇到了同样的运行时错误。
我错过了什么?不能将枚举列表用作 class 属性 吗?
您需要在添加 foo 之前初始化您的 fooList,如下所示:
fooList = new List<FooEnum>();
向您的 Entity
class 添加构造函数并初始化 FooList
或 foolist
如下所示
public class Entity
{
public List<FooEnum> FooList { get; set; }
// ctor
public Entity()
{
FooList = new List<FooEnum>();
}
}