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

我也有同样的问题,解决方案是用“new list();”初始化构造函数中的list字段,但在我的程序中我有一个结构,没有类。如果C#中的结构是无参数的,我可以用C#做什么

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结构不能初始化字段。