2016-07-26 4 views
0
class Program 
{ 
    static void Main(string[] args) 
    { 
     IntIndexer myIntIndexer = new IntIndexer(5); 
     for (int i = 0; i < 5; i++) 
     { 
      Console.WriteLine(myIntIndexer[i]); 
     } 
    } 
} 
class IntIndexer 
{ 
    private string[] myData; 

    public IntIndexer(int size) 
    { 
     myData = new string[size]; 
     for (int i = 0; i < size; i++) 
     { 
      Console.WriteLine("Enter an antry"); 
      myData[i] = Console.ReadLine(); 
      Console.WriteLine("---------------------------------"); 
     } 
    } 
} 

コンパイル時にエラーが発生する[]でインデックス付けをIntIndexer型の式に適用できません。このエラーは、Console.WriteLine(myIntIndexer[i]);コンストラクタで初期化されたクラスオブジェクトからの配列の出力方法

+0

あなたの問題は 'Console.WriteLine(myIntIndexer [i])'です。あなたの変数はコンテナではありません –

+0

'IntIndexer'クラスはインデクサーを持っていません。詳細については、[this](https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx)の記事を参照してください。 –

答えて

3

あなたのタイプIntIndexerはクラスですが、文のmyIntIndexer[i]でクラスの配列としてアクセスしようとしています。あなたはあなたが文字の配列としてstringにアクセスしたいと思われているので、代わりにクラスおよびアクセスに文字列を公開する必要があるだろう:

public string[] myData; 

Console.WriteLine(myIntIndexer.myData[i]); 
1

問題がありますここに:

Console.WriteLine(myIntIndexer[i]); 

あなたは、インスタンスが配列そのものではなく、クラスのみCであるかのようにIntIndexerのインスタンスのインデックスを使用しようとしていますはプライベートフィールドとしての配列です。あなたは何とかこれを公開する必要があり、それを行うための一つの方法は、アクセサとプロパティを作成することです:

public string[] MyData 
{ 
    get { return myData; } 
} 

その後、あなたはこのようにそれを呼び出すことができます。

Console.WriteLine(myIntIndexer.MyData[i]); 
1

あなたのインスタンスにアクセスしています配列のように、あなたが言及した他の回答のような配列を公開したり。これは、あなたのインスタンスへのインデックスに能力を与える配列

public string this[int index] 
{ 
    get 
    { 
      return myData[i]; 
    } 
} 

のコンテンツにアクセスするために、インデクサプロパティを提供することができます現在あなたの答えでやっているように

関連する問題