在运行时创建类实例并同时初始化

时间:2011-08-11 12:55:35

标签: c# .net .net-3.5

我正在尝试使用代码在运行时创建一个类的多个实例,并且还要初始化,但是它给出了错误:

  

在此范围内无法声明名为'inum'的局部变量,因为   它会给'inum'赋予不同的含义,这已经被用于了   “父母或当前”范围来表示其他内容。

public class MyClass
{
    static int i=0;

    class A
    {
        public A()
        { 

        }
    }

    public static void Run()
    {
        string inum = "i";
        for (int j=1;j<=5;j++)
        {
            inum = inum + j.ToString();
            //Initialize Instance
            A inum = new A();
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您似乎试图“动态”使用变量名称。这在C#中不起作用,你应该改变你对变量的看法。如果要创建多个实例,请声明一个数组:

public class MyClass
{
    static A[] instances;

    class A
    {
        public A()
        { 

        }
    }

    public static void Run()
    {
        instances = new A[5];
        for (int j=0;j<5;j++)
        {
            instances[j] = new A();
        }
    }
}

答案 1 :(得分:1)

你不能在c#中拥有动态变量。您正在尝试的追加是附加值而不是变量指针。

而不是这样使用

   Dictionary<int, A> inum = new        Dictionary<int, A>();
    for (int j=1;j<=5;j++)
    {

        //Initialize Instance and add to dictionary
        inum.Add(j, new A());
    }

您可以通过键名获取它们。还有其他几种将实例存储为集合

的方法

答案 2 :(得分:1)

我不是任何想象力的C#程序员,但是通过Java规则和任何其他类似语法的语言,我知道任何事情,你正在做的是试图用新类型重新声明'inum',在它被声明为同一范围内的字符串之后。

另一点是,即使不是这种情况,你也不是创建多个实例,而是用新实例填充相同的变量5次,这只会导致一个实例(最后一个)。

从快速阅读C#教程我觉得这就像你想要的那样。我不确定你要用'inum'变量做什么,所以它已经消失,静态变量'i':

public class MyClass 
{

    class A
    {         
        public A()
        {

        }
    }

    public static void Run()
    {
        // Declare array to hold instances
        A[] instances;
        // instances is now five elements long
        instances = new A[5];
        for (int j=0;j<5;j++)
        {
            //Initialize Instance
            instances[j] = new A();
        }
    }
}

这应该导致在Run方法范围内有一个名为'instances'的5个对象的数组 - 您可能希望在类本身的范围内,可能作为静态属性。

作为旁注,对于像这样的操作(使用var'j'),最好从0开始,而不是1开始,上面的代码反映了这一点。

答案 3 :(得分:0)

你不能调用类型A“inum”的变量(已存在一个类似的那个)

你必须给它另一个名字,如:

A anyOtherName = new A();

答案 4 :(得分:0)

尝试使用不同的名称命名变量A

A objA = new A();