2

次のようなクラス定義があります。

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 属性の 1 つが null であり、この例外が発生していることがわかります。これまでの回答に感謝します。申し訳ありませんが、私は愚かです。どうすればこれを回避できますか? 割り当てで null をテストし、代わりに空の文字列を与える方法はありますか? もしかして三項演算子?

編集 2: ところで、これは悪い質問です。ここに投稿するためにクラスを切り捨て、element.SelectedItem.Text を使用する要素を除外しました。SelectedItem は null 値であり、私たちをつまずかせるものでした -- TextBox のテキストが null であることを疑問視する以下のコメント投稿者は正しいです。これは null ではなく、null であってはなりません。これは混乱の一部でした。null は element.SelectedItem でした (テスト データには要素が選択されていません)。混乱して申し訳ありませんが、助けてくれてありがとう。

4

4 に答える 4

6

textbox_title、textbox_description、および textbox_url がすべて null でないことを確認しますか?

Textプロパティが null であっても、オブジェクトの作成時に null 参照例外は発生しません。これらの変数のいずれかが実際に null である場合のみです。彼らの名前から判断すると、そうであってはなりません。何らかの理由で null になる可能性がある場合は、に頼る必要があります

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

ただし、それらがすべて存在するがTextnull の可能性がある場合は、null 合体演算子を使用できます。

textbox.Text ?? ""
于 2011-02-03T02:05:54.867 に答える
3

ソース変数の 1 つが null です:

textbox_title
textbox_description
textbox_url

そのため、.Text プロパティを参照しようとすると、(null).Text が有効な式ではないため、Object Reference not set 例外がスローされます。

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">フォームに がありますか?

于 2011-02-03T02:06:04.637 に答える
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 : "",
};
于 2011-02-03T02:16:05.817 に答える
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,
};
}
于 2011-02-03T02:09:31.847 に答える