C# 初始化结构中的列表字段
我也有同样的问题,解决方案是用“new list();”初始化构造函数中的list字段,但在我的程序中我有一个结构,没有类。如果C#中的结构是无参数的,我可以用C#做什么C# 初始化结构中的列表字段,c#,C#,我也有同样的问题,解决方案是用“new list();”初始化构造函数中的list字段,但在我的程序中我有一个结构,没有类。如果C#中的结构是无参数的,我可以用C#做什么 public struct ListStruct<T> : IEnumerable<T>, IList<T> { private List<T> value; //public ListStruct() //{ // this.value
public struct ListStruct<T> : IEnumerable<T>, IList<T>
{
private List<T> value;
//public ListStruct()
//{
// this.value = new List<T>();
//}
// ...
public void Add(T item)
{
((IList<T>)value).Add(item); // Execution time: NullReferenceException was unhandled
}
}
公共结构ListStruct:IEnumerable,IList
{
私有列表值;
//公共ListStruct()
//{
//this.value=新列表();
//}
// ...
公共作废新增(T项)
{
((IList)value).Add(item);//执行时间:未处理NullReferenceException
}
}
如果确实需要,可以使用
Add()
方法测试空值,并在必要时分配一个新列表
很难理解为什么你会需要这个。它在语义上不是一个值类型,因此它通常不应该是一个
结构
,出于性能原因滥用它,然后通过一个比其他方式更复杂的路径也没有多大意义。在结构
中包装列表
,对我来说似乎是个坏主意。你为什么这么做?仅供参考,参考是结构中的列表
。您应该初始化它private List value=new List()代码>。为什么要注释掉构造函数?您已经有了解决问题的代码。(好吧,差不多了。你需要为构造函数定义参数。这类问题可以追溯到上面的注释,试图理解这个结构实际上是什么意思。)这不是doctor和David标记的重复。问题是struct不能有默认构造函数,因此无法通过引用初始化其存储的成员,除非您向构造函数提供参数(),或者放弃将其作为struct
@David否,struct
不能有无参数构造函数,因此,您不能在构造函数中初始化该值(或者至少不能依赖它从构造函数初始化)。同样,结构不能初始化字段。@juharr结构不能初始化字段。