0
[DataContract]
public class PersonField
{
    private string _fieldName;
    private object _fieldValue;

    public PersonField()
    {
    }

    public PersonField(string FieldName, object FieldValue)
    {
        _fieldName = FieldName;
        _fieldValue = FieldValue;
    }
    [DataMember]
    public string FieldName
    {
        get { return _fieldName; }
        set { _fieldName = value; }
    }
    [DataMember]
    public object FieldValue
    {
        get { return _fieldValue; }
        set { _fieldValue = value; }
    }
}

我有上面的这个类,它在我的 WCF 服务中使用。当我尝试在客户端为此创建数组时

PersonField[] test = new PersonField[2];
test[0].FieldName = "test";

我得到对象引用未设置为对象的实例。不知道我做错了什么?

4

2 回答 2

3

由于这是一个类,因此您正在创建一个引用数组,而不是实际的对象。您仍然需要自己分配实例:

PersonField[] test = new PersonField[2];
test[0] = new PersonField();
test[0].FieldName = "test";
test[1] = new PersonField();
于 2012-05-08T23:38:59.537 回答
0

为此,您必须这样做。你也需要test[0]new关键字初始化。

PersonField[] test = new PersonField[2];
test[0] = new  PersonField();
test[0].FieldName = "test";
test[1] = new  PersonField();
test[1].FieldName = "test2";

值类型和引用类型数组

考虑以下数组声明:C#

SomeType[] array4 = new SomeType[10];

此语句的结果取决于 SomeType 是值类型还是引用类型。如果它是值类型,则该语句将创建一个包含 10 个 SomeType 类型实例的数组。如果 SomeType 是引用类型,则该语句创建一个包含 10 个元素的数组,每个元素都初始化为一个空引用。

有关值类型和引用类型的详细信息,请参阅类型(C# 参考)。

这是 MSDN 链接

于 2012-05-08T23:39:36.943 回答