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);
}