2012-03-26 4 views
0

Я пытаюсь создать struct-массив. Я использовал пример предоставленного @JonSkeet найденного в этом SO post создать следующий пример:Использование struct-array

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. –

+1

@JohnM, см. Мое обновление –

+0

Спасибо - я обновил свой пример. –

Смежные вопросы