C# 如何使用带参数的构造函数初始化对象数组?

C# 如何使用带参数的构造函数初始化对象数组?,c#,unity3d,C#,Unity3d,我正试图为一个游戏生成方程式 我为等式中的每一项创建了一个类: [System.Serializable] public class EquationTerm { public int Value { get; set; } //random int between 1 and 9 public int Sign { get; set; } //1 for +, 2 for -, 3 for *, 4 for / public bool IsNex

我正试图为一个游戏生成方程式

我为等式中的每一项创建了一个类:

[System.Serializable]
public class EquationTerm
{
    public int Value { get; set; }      //random int between 1 and 9
    public int Sign { get; set; }       //1 for +, 2 for -, 3 for *, 4 for / 
    public bool IsNextTerm { get; set; }

    //default positive equationTerm 
    public EquationTerm(int value)
    {
        Value = value;
        Sign = 1;
        IsNextTerm = false;
    }

    public EquationTerm(int value, int sign, bool nextTerm)
    {
        Value = value;
        Sign = sign;
        IsNextTerm = nextTerm;
    }
}
然后我创建两个数组来保存等式的左侧和右侧。我想使用InitializeArray函数使用构造函数生成这两个数组,但我不能使用它们,因为它们都有参数。 这有什么办法吗

public class EquationGenerator : MonoBehaviour
{
    EquationTerm[] LeftTerms;
    EquationTerm[] RightTerms;

    void Start ()
    {
        //Initialize both side with a random number of terms
        LeftTerms = InitializeArray<EquationTerm>(Random.Range (1, 6));
        RightTerms = InitializeArray<EquationTerm>(Random.Range (1, 6));
    }

    EquationTerm[] InitializeArray<EquationTerm>(int length) where EquationTerm : new()
    {
        EquationTerm[] array = new EquationTerm[length];
        array [0] = new EquationTerm (Random.Range (1, 10));
        for (int i = 1; i < length; ++i)
        {
            array[i] = new EquationTerm (Random.Range (1, 10), Random.Range (1, 5), true);
        }

        return array;
    }

但它告诉我Activator不存在。

为什么不试试非通用版本:

public class EquationGenerator 
        {
            EquationTerm[] LeftTerms;
            EquationTerm[] RightTerms;

            void Start()
            {
                //Initialize both side with a random number of terms
                LeftTerms = InitializeArray(Random.Range(1, 6));
                RightTerms = InitializeArray(Random.Range(1, 6));
            }

            EquationTerm[] InitializeArray(int length)
            {

                EquationTerm[] array = new EquationTerm[length];
                array[0] = new EquationTerm(Random.Range(1, 10));
                for (int i = 1; i < length; ++i)
                {
                    array[i] = new EquationTerm(Random.Range(1, 10), Random.Range(1, 5), true);
                }

                return array;
            }
        }
公共类等式生成器
{
等式项[]左项;
等式项[]右项;
void Start()
{
//用随机数的项初始化两侧
LeftTerms=InitializeArray(Random.Range(1,6));
RightTerms=InitializeArray(随机范围(1,6));
}
EquationTerm[]初始值设置array(整数长度)
{
EquationTerm[]数组=新EquationTerm[长度];
数组[0]=新的方程项(随机范围(1,10));
对于(int i=1;i
什么是随机范围?您是否希望创建一个随机类的对象并调用.Next(minvalue,maxvalue)?另外,为什么它是一个通用方法,而它所期望的只是EqualationTerm?我使用Random.Range来获取随机整数。例如,InitializeArray(Random.Range(1,6));应该给我一个包含1到5个EquationTerm对象的数组。我不确定是否理解您的第二个问题?我刚刚检查过,它位于UnityEngine名称空间中。。好的,第二个问题呢,你在说什么方法?InitializarRay?请使用UnityEngine中的Random.Range。正如您所说,只需将“new Random().Next(1,10)”更改为:“Random.Range(1,10)”@singsuyash,您可以编辑您的答案以包含Random.Range。
public class EquationGenerator 
        {
            EquationTerm[] LeftTerms;
            EquationTerm[] RightTerms;

            void Start()
            {
                //Initialize both side with a random number of terms
                LeftTerms = InitializeArray(Random.Range(1, 6));
                RightTerms = InitializeArray(Random.Range(1, 6));
            }

            EquationTerm[] InitializeArray(int length)
            {

                EquationTerm[] array = new EquationTerm[length];
                array[0] = new EquationTerm(Random.Range(1, 10));
                for (int i = 1; i < length; ++i)
                {
                    array[i] = new EquationTerm(Random.Range(1, 10), Random.Range(1, 5), true);
                }

                return array;
            }
        }