利用结构数组

时间:2012-03-26 19:49:30

标签: c# arrays .net-3.5 struct

我正在尝试创建一个struct-array。我使用了在此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());

1 个答案:

答案 0 :(得分: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

实际上你不需要一个额外的属性,因为该集合是readonly,也是项目,使该字段公开,就是它

public static readonly IList<ReportDetails> MyArray ...