Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;未设置对象引用…“;关于对象创建_C#_Solrnet - Fatal编程技术网

C# &引用;未设置对象引用…“;关于对象创建

C# &引用;未设置对象引用…“;关于对象创建,c#,solrnet,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 {

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

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,并导致此异常;谢谢你的回答,对不起,我很笨。我怎样才能避开这件事?是否有一种方法可以在赋值时测试null并给出一个空字符串?也许是三元运算符


编辑2:顺便说一句,这是个糟糕的问题。我截断了用于在此处发布的类,并排除了使用element.SelectedItem.Text的元素。SelectedItem是空值,这让我们大吃一惊——下面的评论质疑文本框的文本为空是正确的,这不是空值,也不应该为空值,这是混淆的一部分。空值为element.SelectedItem(测试数据未选择元素)。抱歉造成混淆,再次感谢您的帮助。

您确定textbox\u标题、textbox\u描述和textbox\u url都是非空的吗

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

(textbox == null ? "" : textbox.Text);
但是,如果它们都存在,但
Text
可能为null,则可以使用null合并运算符:

textbox.Text ?? ""

其中一个源变量为空:

textbox_title
textbox_description
textbox_url
所以,当您尝试引用它的.Text属性时,它会抛出一个对象引用not set异常,因为(null).Text不是有效的表达式

如果为null,则可能存在其他错误,可能是在.aspx/.ascx上。因为通常情况下,如果标记正确,您会希望文本框存在

要检查空值,请使用以下命令:

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,
};
但我强烈怀疑您还有其他错误,因为正如前面所说的,您不会期望文本框为空


您说过它可以在其他地方使用-是否可能是您复制了代码,而不是标记?您的表单上确实有
吗?

您需要在使用它之前检查空值

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,
};
}

要解决其他人指出的问题:

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 : "",
};

其中一个是空的,你是对的,谢谢。见我的编辑上面;我需要一种方法来实例化一个对象,即使其中一个属性为null。谢谢,我使用了你的三元来处理这些不合适的部分。请参见上面编辑中的说明。我投票支持你,但通过接受其中一个是空的,你是对的,谢谢。见我的编辑上面;我需要一种方法来实例化一个对象,即使其中一个属性为null。你的直觉很好,请参见上面的解释。我会接受你的答案,因为你的业力比另一个人少,并且有助于你对空原点的怀疑。谢谢,这个答案有点帮助,但我不想把所有类似的事情都特例化,在这里我必须通过所有变量进行链接。如果为空,我是否可以使用三元或eval来输出空字符串,而不是在尝试(null)时抛出错误。Text?是,
元素。如果在下拉框中未选择任何内容,则SelectedItem
将为空。这比文本框为空更有意义。