2011-08-11 9 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'という名前の文字列と第2の変数' A inum'を持つ内部ループを持っています。 2番目の名前を変更して、外側と競合しないようにします。 – asawyer

+0

2番目の変数名が変更されています。連結を見ることができます。 – RKh

答えて

2

別の名前で変数Aに名前を付けてみてください。それは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 anyOtherName = new A(); 
:あなたはそれのように別の名前を与える必要があり

(そのように呼ばれる1がすでに存在する)タイプA「INUM」の変数を呼び出すことはできません

0

は、あなたが「動的」変数名を使用しようとしているように見える

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

Worked。ありがとう。 – RKh

1

私はC#プログラマーではありませんが、私は何かについて知っているJavaや他の同様の構文言語同じ型のスコープ内の文字列として宣言された後、新しい型の 'inum'を再宣言しようとしています。

これ以外の点は、複数のインスタンスを作成するのではなく、新しいインスタンスを同じ変数に5回埋め込むことで、1つのインスタンス(最後のインスタンス)のみになります。

すぐにC#チュートリアルを読むと、これはあなたが望むようなものだと思います。 Iは静的変数であるように私は、あなたがそれがなくなっているように、「INUM」変数をどうしようとしていたかわからないんだけど:

「インスタンス」と呼ばれる5つのオブジェクトの配列を生じるはずである
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メソッドのスコープ内では、これをクラス自体のスコープ内で、場合によっては静的プロパティとして使用することができます。

このような操作(var 'j'を使用)では、0ではなく1で開始することをお勧めします。上記のコードにはこれが反映されています。

+0

結果が表示されません。インスタンスが初期化されておらず、クラスAのコンストラクタに到達していない可能性があります。Console.WriteLine(...)が追加されましたが、ポインタがそこに到達していません。 – RKh

+0

どのような結果を表示したいのですか?(コード内で)どこに表示しますか? – DaveRandom

+0

それは働いています。ありがとう。 – RKh

関連する問題