//我碰到个很要命的问题,实在没办法基础不牢固,连找错都无能为力,我把几处可能出问题的地方
//贴出来,大家帮帮我,否则我卡在这里一动都动不了了。
class A
{
}
class B
{
    //其他属性和方法
    private A[] _myA;
    public A[] MyA              //危险1:要不要用索引啊?
    {
        get
        {
            return _myA;
        }
        set
        {
            _myA = value;
        }
    }
}
class C
{
    //其他属性和方法
    private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........}; //这里的构造函数包含除A[] _myA之外的其他信息
    public B[] MyBs              //危险2:要不要用索引啊?
    {
        get
        {
            return _myBs;
        }
        set
        {
            _myBs = value;
        }
    }    static C()                                              //危险3:用静态构造函数行不行啊?
    {
        if(_myBs[0].xxx.Length==0)
        {
            _myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)}         //完成_myBs的完整初试化
        }        if(_myBs[1].xxx.Length==0)
        {
            //同样
        }        //直到        if(_myBs[9].xxx.Length==0)
        {
            //同样
        }
    }
}
class D
{
    int i=0;
    B mybbb=C.MyBs[i] ;                   //就这里报错说,初始化失败
}
//因为完整的类比较复杂,所以我就没列出来了

解决方案 »

  1.   

    class D
    {
        int i=0;
        B mybbb
    public D()
    {
       mybbb=new C().MyBs[i] ;                   //就这里报错说,初始化失败
    }
    }  
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   

    Thanks!  不是这里class D             //事实上D就是个Form1
    {
         //............
        private void btn_Load_Click(object sender, EventArgs e) 
        {
            //复杂的很
            int i=0;
            B mybbb=C.MyBs[i] ;                   //就这里报错说,初始化失败
             //mybbb=new C().MyBs[i] ; 静态属性也要new吗?  
         }
    }
      

  3.   

    Error:The type Initializer for '我的命名空间.C' threw an Exception
      

  4.   

    B mybbb=C.MyBs[i] ;這裡的 C.MyBs[i] ;取的到東西嗎?
    應該不行吧,C.MyBS返回一個B[],但是你不能C.MyBs[i]
    B[] mybbb = C.MyBs;
    你試下,
      

  5.   

    Thank$!还是不行啊!B[] mybbbs = C.MyBs; //我在这里下了个断点,跑到这里就跳到异常去了
    mybbb=mybbbs[i];
      

  6.   

    呵呵,剛剛試了下,          
        public static   B[] MyBs 
    這樣就OK了.             
      

  7.   

    Thank$!还是不行啊! 难到还有别的错误?
      

  8.   

    万岁!终于定位到错误了,其实前面的都每错,我注释掉这块就能运行了。static C()                                              //危险3:用静态构造函数行不行啊?
    {
        if(_myBs[0].xxx.Length==0)
        {
            _myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)}         //完成_myBs的完整初试化
        }    if(_myBs[1].xxx.Length==0)
        {
            //同样
        }    //直到    if(_myBs[9].xxx.Length==0)
        {
            //同样
        }
    }我想实现的功能是B mybbb=C.MyBs[i] ;也就是第一次被调用时完成完整的初始化,怎么办啊?              
      

  9.   

    class C
    {
        //其他属性和方法
        private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........}; //这里的构造函数包含除A[] _myA之外的其他信息
        //很明显下面这个是一个 实例属性访问器 因为没有static
        //实例属性访问器必须在C类的实例中访问 而不是C.MyBs 
        //而是
        //C aa = new C();
        //B b = aa.MyBs[0];
        public B[] MyBs
        {
            get
            {
                return _myBs;
            }
            set
            {
                _myBs = value;
            }
        }}
      

  10.   

    B[] mybbb=C.MyBs;
    這樣就已經是初始化你的C類了啊,
      

  11.   

    哦!对不住大家了,其实我public B[] MyBs  //public static B[] MyBs 事实上我这里加了static

        get 
        { 
            return _myBs; 
        } 
        set 
        { 
            _myBs = value; 
        } 
    } 我要实现的功能是,开始时只初始化类C里的_myBs的部分东西
    private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........}; 
    等在类D里面调用B mybbb=C.MyBs[i] ; 时在把C里的_myBs[i]的部分东西完全初始化,我那个static C()                   //说实在的本来我想:要是有static C(i) {//完全初始化_myBs[i]}就好了
    {                            //而我这个调用B mybbb=C.MyBs[0]的时候就完全初始化_myBs[0~9]了}
        if(_myBs[0].xxx.Length==0)
        {
            _myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)}         //完成_myBs的完整初试化
        }    if(_myBs[1].xxx.Length==0)
        {
            //同样
        }    //直到    if(_myBs[9].xxx.Length==0)
        {
            //同样
        }
    }
      

  12.   

    B[] mybbbs = C.MyBs; //我在这里下了个断点,跑到这里就跳到异常去了
    mybbb=mybbbs[i];
    如果要这么用,就要用static 属性,
    public static MyBs
    {
        
    }
      

  13.   

    至少从LZ写上来的代码看来,还是有蛮多错误的LZ你在private static B[] _myBs=new B[10]{new B(构造函数),new B(构造函数)...........};和static C()                                              //危险3:用静态构造函数行不行啊?
        {
            if(_myBs[0].xxx.Length==0)这个if这里打上断点,就应该能跟进去看是什么错误了我不知道你这里的xxx是指的什么,但是感觉应该是这里的问题
      

  14.   

    楼上的建议不错,我怎么怎么就没想到在if(_myBs[0].xxx.Length==0) 上下个断点看看呢?可惜我没有机会把代码拿
    到寝室来调试,看来要等到明天白天了.非常感谢大家的关注,我真应该说明白我要干什么了.其实是
    类D要使用类C里的_myBs[10],因为这个东西包含的信息分为基本信息,和附加信息.而且基本信息就一点点,附加信息
    是一个xxx数组(100个元素以上)._myBs[i]都可能但并不是所有都会派上用场的,所以我在属性定义的时候就完成部分
    初始化工作,而当某个_myBs[i]只是当被使用是,就调用构造函数完成它的附加信息,也就是_myBs[i].xxx的初始化工作.
    但是我的水平实在有限,并不能把自己的想法灌输到程序里.
    我这个static C()                   
    {                            
        if(_myBs[0].xxx.Length==0)//如果附加信息没被初始化则完成初始化
        {
            _myBs[0].MyA=new A[]{new A(构造函数),new A(构造函数)}         //完成_myBs的完整初试化
        }    if(_myBs[1].xxx.Length==0)
        {
            //同样
        }    //直到    if(_myBs[9].xxx.Length==0)
        {
            //同样
        }
    }其实在调用任何一个_myBs[i]的时候就已经把其它的成员也完成附加信息的初始化.我真想调用
    _myBs[i]的时候就只初始化自己啊!但我做不到,现在的我太弱了....
      

  15.   

    B mybbb=C.MyBs[i] ;                   //就这里报错说,初始化失败
    你的
    public B[] MyBs              //危险2:要不要用索引啊?
    不是静态的,需要先实例化C才能使用
     C c = new C();   //实例化
     B mybbb = c.MyBs[i];   //使用然后,由于C的构造函数是静态的,new C()的时候根本实例化不了,
    需要将
    static C()                                              //危险3:用静态构造函数行不行啊?
    改成
    public  C() 再然后
    class B
    没有对 private A[] _myA; 进行初始化,还要报错
    所以public A[] MyA需要改一下,大体如下面的
            public A[] MyA              //危险1:要不要用索引啊?
            {
                get
                {
                    if ( _myA == null )
                    {
                        _myA = new A[] { new A(), new A() };
                    }
                    return _myA;
                }
                set
                {
                    _myA = value;
                }
            }
    当然你也可以通过其他方法初始化数组