如何使用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[]
和使用它?
一旦你从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属性。