2 Stimmen

"Objektreferenz nicht gesetzt..." bei Objekterstellung

Ich habe eine Klassendefinition, die wie folgt aussieht:

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

Und in einem Code, von dem aus SolrObj zugänglich ist, habe ich dies:

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

Allerdings, wenn das obige Snippet ausgeführt wird, erhalte ich eine NullReferenceException auf es. Ich verstehe nicht, wie das passieren kann, da ich versuche, es genau dort zu definieren. a ist das Null-Objekt, das die Ausnahme auslöst. Wie kann ich das beheben?

Entschuldigung für die einfache Frage. Das gleiche Snippet oben funktioniert anderswo in einer anderen Funktion, so bin ich irgendwie verwirrt hier.

EDIT: Ich sehe, dass eines der Text-Attribute null ist und diese Ausnahme verursacht; Danke für die Antworten bisher, sorry ich bin dumm. Wie kann ich das umgehen? Gibt es eine Möglichkeit, bei der Zuweisung auf null zu testen und stattdessen eine leere Zeichenfolge auszugeben? Vielleicht ein ternärer Operator?

EDIT 2: Dies ist übrigens eine schlechte Frage. Ich habe die Klasse gekürzt, um sie hier zu posten, und ein Element ausgeschlossen, das element.SelectedItem.Text verwendet. SelectedItem war der Nullwert und die Sache, die uns verwirrt hat - die Kommentatoren unten, die in Frage stellen, dass der Text einer TextBox Null ist, haben Recht, das ist nicht Null und sollte nicht Null sein, was Teil der Verwirrung war. Die null Sache war element.SelectedItem (die Testdaten haben keine ausgewählten Elemente). Entschuldigung für die Verwirrung und nochmals vielen Dank für die Hilfe.

6voto

Matti Virkkunen Punkte 61148

Sind Sie sicher, dass textbox_title, textbox_description und textbox_url alle nicht leer sind?

En Text Eigenschaft Null ist, wird bei der Objekterzeugung keine Nullreferenz-Ausnahme verursachen, nur wenn eine dieser Variablen tatsächlich Null ist. Nach ihren Namen zu urteilen, sollten sie das nicht sein. Wenn sie aus irgendeinem Grund null sein könnten, müssen Sie auf

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

Wenn sie jedoch alle existieren, aber Text null sein könnte, können Sie den Null-Koaleszenz-Operator verwenden:

textbox.Text ?? ""

3voto

JK. Punkte 20597

Eine Ihrer Quellvariablen ist null:

textbox_title
textbox_description
textbox_url

Wenn Sie also versuchen, auf die Eigenschaft .Text zu verweisen, wird eine Object Reference not set-Ausnahme ausgelöst, da (null).Text kein gültiger Ausdruck ist.

Wenn es null ist, dann haben Sie wahrscheinlich einen anderen Fehler, wahrscheinlich in Ihrer .aspx/.ascx. Denn normalerweise würden Sie erwarten, dass eine TextBox existiert, wenn Ihr Markup korrekt ist.

Um auf Null zu prüfen, verwenden Sie dies:

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

Aber ich vermute stark, dass Sie etwas anderes falsch haben, weil, wie gesagt, würden Sie nicht erwarten, dass eine TextBox Null sein.

Sie sagten, dass es anderswo funktioniert - ist es möglich, dass Sie den Code kopiert haben, aber nicht das Markup? Haben Sie tatsächlich eine <asp : TextBox id="textbox_title"> auf Ihrem Formular?

1voto

anishMarokey Punkte 11011

Sie müssen null überprüfen, bevor Sie es verwenden

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

1voto

Jon Punkte 15508

Um das Problem zu beheben, auf das andere hingewiesen haben:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X