2012-03-26 14 views
0

構造体配列を作成しようとしています。私は今、MyArrayというのIListは、任意のメソッドやプロパティを公開されていないとして、私のコードでこのクラスを使用する方法がわからないよ構造体配列を利用する

public class JonSkeetClass 
    { 

     public struct ReportDetails 
     { 
      private readonly int indexd; 
      private readonly string name; 

      public ReportDetails(int indexd, string name) 
      { 
       this.indexd = indexd; 
       this.name = name; 
      } 

      public int Indexd { get { return indexd; } } 
      public string Name { get { return name; } } 
     } 


     static readonly IList<ReportDetails> MyArray = new ReadOnlyCollection<ReportDetails> 
     (
     new[] 
     { 

      new ReportDetails(0, "Daily Unload Counts by Group"), 
        new ReportDetails(1,"Daily Unloads")   

     }); 


     public statis IList<ReportDetails> GetMyArray 
     { 
     get{ return MyArray; } 
     } 


    } 

を:私は、以下の例を作成するには、このSO postで見つかった@JonSkeetによって提供された例を使用していました。

Update1:​​上記のコードサンプルが@Adrianの提案で更新されました。あなたはクラスの外MyArrayというフィールドにアクセスすることはできませんパブリックメソッド

/*public*/ class JonSkeetClass /*the visibility of this class depends on where you'll be using it*/ 
    { 
     public struct ReportDetails /*this needs to be public also (or internal)*/ 
     { 
      .... 
     } 
     public static IList<ReportDetails> GetMyArray 
     { 
      get 
      { 
       return MyArray; 
      } 
     } 

    } 

編集

を経由してあなたがそれを公開する必要が

IList<JonSkeetClass.ReportDetails> MyArray = JonSkeetClass.GetMyArray; 
MessageBox.Show(MyArray[0].Name.ToString()); 

答えて

2

をするので:初期化するために

プライベートメンバーです。つまり、このフィールドを公開するパブリックプロパティを追加する必要があります。 MyArrayというにアクセスするには

[0] .nameのを、

JonSkeetClass.GetMyArray[0].Name 

編集2

コレクションが読み取り専用であるため、実際にあなたが作る、アイテムも、余分な財産を必要としないを呼び出しますそのフィールドの公開、それはそれです

public static readonly IList<ReportDetails> MyArray ... 
+0

ありがとう。これにより、プログラム内でクラスが可視になりますが、どのようにして値を呼び出すことができますか?私はそれがMyArray [0] .Nameと思っていました。 –

+1

@ JohnM、私の更新を参照してください –

+0

ありがとうございます - 私は私の例を更新しました。 –