问题 数组和结构

约翰尼

新成员
已加入
2014年10月30日
留言内容
4
编程经验
3-5
你好,
我有这个代码

C#:
public class a
{
    sa sa1 = new sa(0);
        
    public void test ()
    {
        uint i, j; 

        for (i = 0; i <= 1; i += 1) {
            for (j = 0; j <= 13; j += 1) {
                sa1.va[i].vb[j] = false;
            }
        }
    }
        
    public struct sa
    {
        public sb[] va;
    
        public sa(uint i): this()
        {
            va = new sb[2];
        }
    }

    public struct sb
    {
        public bool[] vb;

        public sb(uint i): this()
        {
            vb = new bool[14];
        }
    }
}


当我尝试运行无效测试时,我收到此错误:...对象引用未设置为对象的实例"
我在哪里做错了?
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,524
地点
悉尼,澳大利亚
编程经验
10+
在您的`sa`构造函数中,您可以通过指定长度来创建数组,但绝不会创建要分配给元素的`sb`对象。这意味着您编写的sb构造函数永远不会被调用,因此每个sb对象中的vb数组都不会被设置,因此每个元素都为null。很可能您根本不应该使用结构,而应该使用类。

为了向自己证明这一点,请使用F9键在每个结构构造函数上放置一个断点。运行代码时,您会看到其中一个被命中,而另一个未受命。
 
最佳 底部