2012-03-26 69 views
0

我想创建一个结构数组。我曾经在这个SO post发现@JonSkeet提供的例子创建下面的例子:利用结构数组

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


    } 

我现在不能确定如何使用这个类在我的代码为MYARRAY IList中没有暴露任何方法或属性。

Update1:​​上面的代码示例已使用@Adrian的建议更新。

初始化:

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

回答

2

你需要通过一个公共的方法来揭露它

/*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; 
      } 
     } 

    } 

编辑

你不能访问类的,因为外面MYARRAY场是私人会员。这意味着你需要添加一个暴露这个字段的公共属性。

要访问MYARRAY [0] .name和调用

JonSkeetClass.GetMyArray[0].Name 

编辑2

其实你并不需要一个额外的属性,因为收藏是只读的,也是项目,使该领域的公众,就是这样

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

谢谢。这使得该类在程序中可见,但我现在如何调用这些值?我想这将是MyArray [0] .Name。 – 2012-03-26 20:00:59

+1

@JohnM,看我的更新 – 2012-03-26 20:07:50

+0

谢谢 - 我已经更新了我的例子。 – 2012-03-26 20:12:20