我可以使用此代码段:
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[]
及其消费的正确声明吗?
答案 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;
}
}
无论如何,编译器正在创建一个私有支持字段,所以为什么不明确它。此外,自动实现的属性有一些缺点(序列化,线程等)。以“老式”方式实现它也为您提供了一个实际创建数组的好地方。当然,如果您不需要担心这些问题 - 继续使用自动实现的属性。