日期:2014-05-18  浏览次数:21689 次

C#中结构体声明数组成员如何初始化?
我声明了以下的结构体:
  struct indiv
  {
  public int[] chr;
  public double fit;
  } ;
   
  然后
  indiv bestindiv=new indiv();
  indiv worstindiv= new indiv();
  indiv currentbest = new indiv();
  indivi[] pop = new indiv[500];


vs2010警告说  

从未对字段“Bishop.gafor.indivl.chrom”赋值,字段将一直保持其默认值 null C:\Documents and Settings\Administrator\桌面\DSREA-MC2.3\Bishop\gafor.cs

编译可以通过,但是运行的时候出错了。请教各位大侠,如何解决这个问题?


------解决方案--------------------
哪来的chrom,你出错在哪出的错,你这几行应该不会出错
另外 indivi[]写错了,应该是 indiv[]
------解决方案--------------------
你遇到的错误和你贴的代码无关
------解决方案--------------------
找这个文件gafor.cs里有错误
------解决方案--------------------
一般用静态构造函数,

struct indiv
{
private static indiv s_default;
static indiv()
{
s_default.chr=null;
s_default.fit=0.0;
}
public static indiv Default
{
get
{
return s_default;
}
}

public int[] chr;
public double fit;
} ;

indiv bestindiv=indiv.Default;//这样就可以初始化成员,

 
------解决方案--------------------
500个元素的结构体数组,就比较麻烦,最好把初始化chr数组作为一个方法,

struct indiv
{
...
public void initialize(int nArrayLength)
{
....
chr=new int[nArrayLength];
//如果要初始化:
for(int i=0;i<nArrayLength;i++)
{
chr[i]=...;
}
  
}

private static indiv s_default;
static indiv()
{
s_default.chr=null;
s_default.fit=0.0;
}
public static indiv Default
{
get
{
return s_default;
}
}

}

indivi[] pop = new indiv[500];
for(int i=0;i<500;i++)
{
indivi[i]=indivi.Default;
indivi[i].initialize(50);
}