C#中的可变长度数组

时间:2012-04-21 22:58:38

标签: c# arrays

我有一个定义了几个全局变量的类,如下所示:

namespace Algo
{
    public static class AlgorithmParameters
    {
        public int pop_size = 100;

    }
}

在我的另一个csharp文件中,它还包含main(),在main()中我声明了一个类型结构数组,数组大小为pop_size,但我在"chromo_typ Population[AlgorithmParameters.pop_size];"上收到了一些错误。请在下面找到代码。我对可变长度大小的数组声明使用了不正确的语法吗?

namespace Algo
{
    class Program
    {
        struct chromo_typ
        {
            string   bits;  
            float    fitness;

            chromo_typ() {
                bits = "";
                fitness = 0.0f;
            }

            chromo_typ(string bts, float ftns)
            {
                bits = bts;
                fitness = ftns;
            }
        };

        static void Main(string[] args)
        {

            while (true)
            {
                chromo_typ Population[AlgorithmParameters.pop_size];
            }
        }
    }
}

错误是:

Bad array declarator: To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type.

Array size cannot be specified in a variable declaration (try initializing with a 'new' expression)

请帮忙。

3 个答案:

答案 0 :(得分:8)

在声明变量时没有指定大小,在创建数组实例时指定它:

chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];

或者如果您将声明和创作分开:

chromo_typ[] Population;
Population = new chromo_typ[AlgorithmParameters.pop_size];

答案 1 :(得分:2)

以这种方式更改初始化:

        //while (true) ///??? what is the reason for this infinite loop ???
        //{ 
            chromo_typ[] Population = new chrom_typ[AlgorithmParameters.pop_size] ; 
        //} 

您还需要将pop_size更改为静态,因为它是在静态类中声明的。

答案 2 :(得分:1)

不确定为什么你必须使用while(true)

但无论如何,要声明数组,你必须这样做:

chromo_typ[] Population = new chromo_typ[AlgorithmParameters.pop_size];

并且您还必须在AlgorithmParameters

中将成员pop_size声明为static
public static class AlgorithmParameters
{
     public static int pop_size = 100;
}