2011-08-11 110 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

相關問題