对象创建时“对象引用未设置...”

时间:2011-02-03 02:04:48

标签: c# solrnet

我有一个类定义,如下所示:

public class SolrObj
{
[SolrUniqueKey("id")]
public int id { get; set; }

[SolrField("title")]
public string title { get; set; }

[SolrField("description")]
public string description { get; set; }

[SolrField("url")]
public string url { get; set; }
}

在一些可以访问SolrObj的代码中,我有这个:

SolrObj a = new SolrObj
{
    id = edit_id,
    title = textbox_title.Text,
    description = textbox_description.Text,
    url = textbox_url.Text,
};

但是,当上面的代码片段运行时,我得到一个NullReferenceException。我不知道这是怎么发生的,因为我正试图在那里定义它。 a是抛出异常的null对象。我该如何解决这个问题?

很抱歉这个简单的问题。上面的相同片段在另一个函数的其他地方工作,所以我有点困惑。

编辑:我看到其中一个Text属性为null并导致此异常;谢谢你到目前为止的答案,对不起我是愚蠢的。我怎么能绕过这个?有没有办法可以在赋值时测试null并改为给出一个空字符串?也许是三元运营商?

编辑2:顺便说一句,这是一个糟糕的问题。我在此处截断了要发布的类,并排除了使用element.SelectedItem.Text的元素。 SelectedItem是空值和让我们绊倒的东西 - 下面提到的TextBox的Text为null的评论者是正确的,这不是null,不应该是null,这是混乱的一部分。 null是element.SelectedItem(测试数据没有选择元素)。对不起,感到困惑,再次感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

你确定textbox_title,textbox_description和textbox_url都是非空的吗?

Text属性为null将不会在对象创建时导致空引用异常,只有当其中一个变量实际为null时才会。从他们的名字来看,他们不应该。如果由于某种原因它们可能为空,那么你将不得不求助于

(textbox == null ? "" : textbox.Text);

但是,如果它们都存在但Text可能为null,则可以使用空合并运算符:

textbox.Text ?? ""

答案 1 :(得分:3)

您的一个源变量是null:

textbox_title
textbox_description
textbox_url

因此,当您尝试引用它的.Text属性时,它会抛出一个Object Reference not set exception,因为(null).Text不是一个有效的表达式。

如果它为null,那么您可能还有其他错误,可能是在.aspx / .ascx上。因为如果你的标记是正确的,通常你会期望TextBox存在。

要检查null,请使用:

SolrObj a = new SolrObj
{
    id = edit_id,
    title = textbox_title != null ? textbox_title.Text : string.Empty,
    description = textbox_description != null ? textbox_description.Text : string.Empty,
    url = textbox_url != null ? textbox_url.Text : string.Empty,
};

但是我强烈怀疑你还有其他错误,因为如前所述,你不会指望TextBox为null。

你说它在其他地方有效 - 你是否有可能复制了代码,而不是标记?你的表单上确实有<asp : TextBox id="textbox_title">吗?

答案 2 :(得分:1)

在使用之前需要检查null

if(edit_id != null & textbox_title!-= null & textbox_description!= null & textbox_url!=null)
{
SolrObj a = new SolrObj
{
    id = edit_id,
    title = textbox_title.Text,
    description = textbox_description.Text,
    url = textbox_url.Text,
};
}

答案 3 :(得分:1)

解决其他人指出的问题:

SolrObj a = new SolrObj
{
    id = edit_id,
    title = textbox_title != null ? textbox_title.Text : "",
    description = textbox_description != null ? textbox_description.Text : "",
    url = textbox_url != null ? textbox_url.Text : "",
};