C# 中的可变长度数组

本文关键字:数组 | 更新日期: 2023-09-27 18:31:50

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

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)

请帮忙。

C# 中的可变长度数组

声明

变量时无需指定大小,而是在创建数组实例时指定大小:

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

或者,如果将声明和创建分开:

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

以这种方式更改初始化:

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

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

不知道为什么你必须使用一段时间(真的)

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

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

并且还必须在算法参数中将成员pop_size声明为静态

public static class AlgorithmParameters
{
     public static int pop_size = 100;
}

尝试更改初始化语句如下,它将创建一个实例

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