如何将C#对象数组用作属性

时间:2011-08-31 20:32:45

标签: c# .net arrays object

我可以使用此代码段:

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 个答案:

答案 0 :(得分:2)

只要您将其从Obj更改为ObjectAsArray,就应该进行编译。你仍然需要实际创建数组:

ObjectAsArray = new object[10];
ObjectAsArray[5] = "Hello";

答案 1 :(得分:1)

你试图在Obj[n]本身被初始化之前设置Obj ...所以,我想你得到了一个空引用异常。您需要执行一项任务,如下所示:

Obj = new Object[];

......并在上下文中:

public fubar()
{

  Obj = new Object[13]{}; // where 13 is the number of elements
  Obj[n] = SomeObject;
}

答案 2 :(得分:0)

我建议为object []属性添加一个私有支持字段并将其初始化 - 直接或在getter中。

object[] _objectsAsArray = new object[10];

OR

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

无论如何,编译器正在创建一个私有支持字段,所以为什么不明确它。此外,自动实现的属性有一些缺点(序列化,线程等)。以“老式”方式实现它也为您提供了一个实际创建数组的好地方。当然,如果您不需要担心这些问题 - 继续使用自动实现的属性。