如何使用c#对象数组作为属性

本文关键字:属性 数组 对象 何使用 | 更新日期: 2023-09-27 18:07:06

我可以使用下面的代码片段:

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[]和使用它?

如何使用c#对象数组作为属性

一旦你从Obj更改为ObjectAsArray,它应该编译。你仍然需要创建数组:

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

您试图在Obj本身初始化之前设置Obj[n]…所以,我想你会得到一个空引用异常。您需要执行一个赋值操作,如下所示:

Obj = new Object[];

…在上下文中:

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

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

object[] _objectsAsArray = new object[10];

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

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