C# エラー: オブジェクトのインスタンスに設定されていないオブジェクト参照がオブジェクト インスタンスに設定されていません

この例外が表示されます: Null.XXX になるメソッド (プロパティまたは他のメンバー) を呼び出す Null オブジェクトが原因です。

もちろん、そのような異常なシーンは数千あり、数は無限にありますが、本質は同じです。

このエラーは非常に一般的で、null オブジェクトが使用されている場合に発生します。

文字列 str=User.name のように空のオブジェクトを使用するとエラーが発生します; User=null の場合、このエラーが報告されます

理由 1: 名前が間違っていてコントロールが見つからない. コントロールを
取得するときの元のコードは: "text1 = GetControl("Content/Main/Body/Mail1/Text");" エラーの理由は非常に単純で、コントロールを取得するときに見落とされていました。最初のパスと間違ったコントロール名が使用されていました。
ここで皆さんに思い出していただきたいのは、コントロールを最初から取得する場合は、最初のパスから取得することを忘れないでください。直接言えば、それはパネルの一番上のコントロールです。コントロール名のスペルを常にチェックして、正しいことを確認してください。これらのエラーの 50% は、コントロール名のスペルミスが原因です。また、「(」、「)」などの漢字を使用しないコントロール名は取得できませんのでご注意ください。最も簡単で安全な方法は、コントロールを取得するときにパネルからコントロール名を直接コピーすることです。これは、エラーが発生しにくい方法です。

理由 2: タイミング ロジックの問題. 値を変数に非同期的に代入する場合、
いくつかの大きなデータ オブジェクト、画像オブジェクトなどをロードするなど、代入の前に空の変数が参照され、ロードが完了する前に呼び出しが行われる可能性があります。 . この時点では空である必要があります. エラー.

Unity のライフ サイクルでは、インスタンス化を start() メソッドに記述します。私が書いたのは、1 つのクラスを使用して別のクラスを呼び出すことであり、両方のクラスの変数をインスタンス化する必要があります。次に、クラス A を使用しています クラス B の場合が呼び出されると、クラス B の変数がまだインスタンス化されていない可能性があり、その結果、クラス B の変数の戻り値が空になります。

解決策は、すべての最初のインスタンス化を Awake() メソッドに入れることであり、最終的に問題は解決されます。

プログラムを書いているとき、変数には実際のオブジェクトが割り当てられているに違いないと考えるでしょう。実行時にこの「ヌ​​ルへのポイント」例外が発生した場合は、プログラムのデバッグを開始して、前のコード (またはプログラム コール スタックのより深いエントリ メソッド) がこの変数に値 (オブジェクト) を渡さなかった理由を追跡する必要があります。 . これは多くの場合、プログラム ロジック エラーが原因です. 変数 commandCanalService に値を割り当てたかどうかを検索する必要があります.

解決策: null の判定
if(obj!=null){do something...} の判定を追加するか、呼び出す前にオブジェクトを事前にロード (インスタンス化) します。

この関数は比較的簡単にわかります。渡されたパラメーター値が Null の場合、Null と同じです。Replace が呼び出され、上記のエラーが発生します。

したがって、通常、関数の最初の行では、値は if(!string.IsNullOrEmpty(value)) once になります。

例 2: 別のジェネラル コール エラー、バインディング、Eval("field")、このメソッドは比較的一般的です。場合によっては、文字列比較に変換する必要があります。以下に例を示します。

<%# Eval("フィールド").ToString()=="1"? "はい": "いいえ" %>

Eval("field") が Null の場合、 Null.ToString() は必然的に上記のエラーを引き起こしますが、どうなりますか?

1: フィールドの値が Null です

2: 空のデータ行。つまり、テーブルの行にデータがなく、すべて Null です。

したがって、それを書く予防的な方法は次のとおりです。

<%# Convert.ToString(Eval(“字段”))==“1”?“はい”:“いいえ” %

もちろん、単に書くだけなら

C#コード?

1

2

3

4

if(obj!=null){do something...}
これにより、プログラムが例外をスローするのを防ぐことができますが、論理エラーの問題は解決されません。変数。

実際の解決策は次のとおりです。
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41883890/article/details/128806093