使用结构数组

本文关键字:数组 结构 | 更新日期: 2023-09-27 18:29:07

我正在尝试创建一个结构数组。我使用@JonSkeet在这篇SO文章中提供的例子创建了下面的例子:

 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没有公开任何方法或属性。

更新1:上面的代码示例已根据@Adrian的建议进行了更新。

初始化:

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

使用结构数组

您需要通过公共方法公开它

/*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 ...