0

我收到错误“对象引用未设置为对象的实例。” 我的在这里,

 public class UserProfession
    {
        public UserProfession()
        {

        }
        public System.String[] Designation
        {
            get;
            set;
        }
}

然后我像使用它一样,

 UserProfession.Designation[0] =txt_Search.Text.ToString();

错误我提到你希望你的建议。

-谢谢

4

3 回答 3

1

在分配值之前,您必须初始化对象。初始化应该只进行一次。我已将数组大小初始化为十。你可以在这里拥有自己的价值观。如果要动态调整大小,可以使用 ArrayList

int length = 10;
UserProfession.Designation = new System.String[length];
UserProfession.Designation[0] =txt_Search.Text.ToString();

更多信息: http: //msdn.microsoft.com/en-us/library/aa287601 (v=vs.71).aspx

于 2013-01-02T03:56:37.477 回答
1

当您对数组属性进行赋值时,如下所示:

UserProfession.Designation[0] =txt_Search.Text.ToString();

您实际上正在做的是调用该get属性的部分......而不是set. 这将返回支持该属性的对象......整个对象,而不仅仅是索引。直到对象返回后才会进行索引查找。一旦你有了那个对象,访问索引就可以正常工作了。

你得到这个特定的异常是因为你有一个UserProfession.Designation应该返回对数组对象的引用的表达式,但是因为你从未初始化数组,所以当你尝试查找第 0 个元素的引用时,那里什么也没有。此时,框架发现数组(您的“对象引用”)“未设置为对象的实例”……这只是一种奇特的说法null

换句话说,您需要有一个已经存在的数组来保存您要分配的值。这意味着做这样的事情:

Designation = new String[10];
public String[] Designation
{
    get;
    set;
}

但是,请注意我们从未使用过该set部分?因此,您可以进一步简化,如下所示:

Designation = new String[10];
public String[] Designation {get;private set;}

这将防止客户端代码从您的对象下完全交换整个数组,否则将提供数组属性的全部功能。如果您为数组提供自己的后备存储,您甚至可以完全摆脱 setter 而不会丢失功能:

private string[] _designation = new string[10];
public string[] Designation {get {return _designation;} }

但是,让我们再补充一点:您希望在初始化数组之前将其分配给数组,这向我表明您可能并不真正知道它会在前面有多大。如果是这种情况,您可能需要某种集合而不是数组。泛型 List 是一种方便且非常兼容的数组替代品。看起来像这样:

private List<string> _designation = new List<string>();
public List<string> Designation {get {return _designation;}}

您仍然可以按索引访问该列表中的项目,就像使用数组一样。您现在需要担心的唯一区别是如何添加新项目:

UserProfession.Designation.Add(txt_Search.Text);    

另请注意,我删除了 .ToString() 调用。由于您的.Text属性几乎可以肯定已经是一个字符串,因此调用 .ToString() 方法只是愚蠢的。

于 2013-01-02T04:10:03.867 回答
0

它必须在我们使用之前初始化值,因为目前它是空的。你最好在构造函数中添加初始化代码。

于 2013-01-02T04:05:55.093 回答