2011-08-11 81 views
0

我试图下面的代码在运行时创建一个类的多个实例,并且希望也进行初始化,但它给错误:在运行时创建类的实例,同时初始化

A local variable named 'inum' cannot be declared in this scope because it would give a different meaning to 'inum', which is already used in a 'parent or current' scope to denote something else.

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(); 
     } 
    } 
} 
+0

请提供你所实际上是试图做更多的情况下,而不是该由例子! – Henrik

+0

错误消息告诉你什么是错的:有一个名为字符串'inum'与第二变量'一个inum'内部循环。重命名第二个,以免与外部冲突。 – asawyer

+0

第二个变量名称正在改变。你可以看到连接。 – RKh

回答

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(); 
     } 
    } 
} 
+0

它出现错误:“实例在Run()方法中写入的行的名称'实例'在当前上下文中不存在”。 – RKh

+0

@RPK:那么你没有得到和我一样的代码。我编写的代码。我不能告诉你现在有什么问题... –

+0

雅它工作。我可能错过了一些东西,后来我复制了整体并且工作。谢谢。 – RKh

0

你不能叫A型“INUM”的变量(已经存在一个名为像)

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

A anyOtherName = new A(); 
0

尝试用不同的名字来命名变量A

A objA = new A(); 
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()); 
    } 

您可以通过键名得到他们。还有一些其他的方式来实例存储为收集

+0

工作。谢谢。 – RKh

1

我不会被任何想象一个C#程序员,但Java和任何其他类似syntaxed语言,我知道任何有关的规则,你在做什么是试图在一个新类型被重新声明为'inum'之后,在它被声明为同一范围内的一个字符串之后。

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

从快速阅读C#教程,我觉得这有点像你想要什么。我不知道你试图用“INUM”变量,以便让它去这样做,因为是静态变量“我”:

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

这应该导致5个对象的数组被称为“实例”在Run方法的范围内 - 您可能希望将其放在类本身的范围内,可能是一个静态属性。

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

+0

它不显示任何结果。可能实例没有初始化,也没有到达类A的构造函数。我添加了:Console.WriteLine(...),但指针没有到达那里。 – RKh

+0

你想要显示什么结果以及你想在哪里显示它(在代码中)? – DaveRandom

+0

它正在工作。谢谢。 – RKh

相关问题