Как использовать объектный массив C # в качестве свойства - PullRequest
0 голосов
/ 01 сентября 2011

Я могу использовать этот фрагмент:

public object Obj
{
    get;
    set;
}

Как это:

public fubar()
{
    ...
    Obj = SomeObject;
}

Но, похоже, не могу использовать этот фрагмент:

public object[] ObjectAsArray
{
    get;
    set;
}

Как и любой другой способ, который я пробовал до сих пор:

public fubar()
{
    ...
    Obj[n] = SomeObject;
    //or 
    var x = Obj[0] as SomeObject;
    //or other ways...
}

Кажется, я что-то здесь упускаю.

Может ли кто-нибудь привести простой пример правильного объявления свойства C # типа object[] и его потребления?

Ответы [ 3 ]

2 голосов
/ 01 сентября 2011

Как только вы измените его с Obj на ObjectAsArray, он должен скомпилироваться.Вам все равно нужно будет на самом деле создать массив, хотя:

ObjectAsArray = new object[10];
ObjectAsArray[5] = "Hello";
1 голос
/ 01 сентября 2011

Вы пытаетесь установить Obj[n] до инициализации Obj ... так что, я думаю, вы получаете исключение с нулевой ссылкой. Вам нужно выполнить задание, например так:

Obj = new Object[];

... и в контексте:

public fubar()
{

  Obj = new Object[13]{}; // where 13 is the number of elements
  Obj[n] = SomeObject;
}
0 голосов
/ 01 сентября 2011

Я бы предложил добавить частное вспомогательное поле для свойства object [] и инициализировать его - напрямую или в получателе.

object[] _objectsAsArray = new object[10];

OR

public object[] ObjectAsArray   
{       
     get 
     { 
         if(_objectsAsArray == null)
             _objectsAsArray = new object[10];
         return _objectsAsArray;
     }
     set
     {
        _objectsAsArray = value;   
     } 
}

В любом случае компилятор создает приватное вспомогательное поле, так почему бы не сказать об этом прямо. Кроме того, автоматически реализуемые свойства имеют некоторые недостатки (сериализация, многопоточность и т. Д.). Выполнение этого «старомодным» способом также дает вам хорошее место для создания массива. Конечно, если вам не нужно беспокоиться об этих проблемах - продолжайте и используйте автоматически реализованное свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...