首先在程序中声明了10个对象数组如下:
protected Model[] models = new Model[10];//Model是自定义类
接着,我访问这个数组中任意一个元素,如:
models[0].ModelName//ModelName是Model类中的一个属性。
问题出现了,编译时顺利通过,但程序调试到这行语句时就出错。
注:models[0]为空对象,我没有赋具体的实例。
这是什么原因啊?

解决方案 »

  1.   

    你只初始化了10个model数组。
    可是里面没有赋值呀
    你怎么取models[0].ModelName呢
      

  2.   

    protected Model[] models = new Model[10];
    这样实例化的结果实际上是
    Model[0]=null;
    Model[1]=null;
    Model[2]=null;
    .....
    所以。
      

  3.   


    编译器只是从语法上去判断是否正确,这种运行时的状态又不是编译器能帮你完成的事情.如果Module是值类型,你直接这么用没关系,如果是引用类型,必须先new出对象.
      

  4.   

    protected Model[] models = new Model[] { 
       new Model() { ModelName=..},
       new Model() { ModelName=..},
       ...
    }
      

  5.   

    if(models[0]!=null)
      string s=models[0].ModelName;
    必须先new 对象
      

  6.   

    数组里面的元素都是空对象要初始化才行如果不是固定一直有对象,或者个数确定
    确实用List比较好点
      

  7.   

    protected Model[] models = new Model[10];
    //上面这句话,只是定义了一个大小为10的数组对象,但是对象里面未曾存放过任何东西。
    相当于是仅仅标识了十个对象的类型为Model而已。真正要用的话,需要先给这个数组一个个的赋值。
      

  8.   

    数组中的对象还得再赋值的,得重新new的。
      

  9.   

    我把大家的思路变成代码,你就明白了。
    protected Model[] models = new Model[10];//Model是自定义类for(int i = 0; i < models.Length; i++)
    {
        models[i] = new Model();
    }
      

  10.   

    protected Model[] models = new Model[10];需要在构造函数或某方法中加..for(int i = 0 ;i < models.Length;i++)
    {
       models[i] = new Model();
       //为models[i]的各属性赋值
    }
      

  11.   

    除了楼上大神们说的实例化后赋值,还可以在Model内赋予初始值,当然这样没什么意义,你实例化了就是要用对象,所以你出这个错误就是没有对对象赋值,
      

  12.   

    protected Model[] models = new Model[10];
    赋值了吗?
    如果没有的话当然为null
      

  13.   

    没有对Model数组中的某一项进行实例化,所以导致为空。解决方法:for(int i=0;i<models.length;i++)
    {
        models[i]=new models();
    }
      

  14.   


    var models =new []{new Model{ModelName="初始化"}};