0

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。私はここにいます、

 public class UserProfession
    {
        public UserProfession()
        {

        }
        public System.String[] Designation
        {
            get;
            set;
        }
}

それから私はそれを次のように使用しています、

 UserProfession.Designation[0] =txt_Search.Text.ToString();

エラー私はあなたがあなたの提案を望んでいると述べました。

-ありがとう

4

3 に答える 3

1

値を割り当てる前に、オブジェクトを初期化する必要があります。初期化は1回だけ実行する必要があります。配列サイズを10に初期化しました。ここで独自の値を持つことができます。動的にサイズを変更する場合は、ArrayListを使用できます

int length = 10;
UserProfession.Designation = new System.String[length];
UserProfession.Designation[0] =txt_Search.Text.ToString();

詳細については、http://msdn.microsoft.com/en-us/library/aa287601 (v = vs.71).aspxを参照してください。

于 2013-01-02T03:56:37.477 に答える
1

次のように、配列プロパティに割り当てを行う場合:

UserProfession.Designation[0] =txt_Search.Text.ToString();

実際に行っているのはget、そのプロパティのセクションを呼び出すことです...ではありませんset。これにより、プロパティをサポートするオブジェクトが返されます...インデックスだけでなく、オブジェクト全体が返されます。インデックスルックアップは、オブジェクトが返されるまで発生しません。そのオブジェクトを取得すると、インデックスへのアクセスは通常の方法で機能します。

配列オブジェクトへの参照を返す必要がある式があるため、この特定の例外が発生しますがUserProfession.Designation、配列を初期化しないため、0番目の要素の参照を検索しようとしても何もありません。この時点で、フレームワークは、配列(「オブジェクト参照」)が「オブジェクトのインスタンスに設定されていない」ことを検出します...これは、それがであると言うための空想的な方法ですnull

つまり、割り当てる値を保持するには、既存の配列が必要です。これは、次のようなことを意味します。

Designation = new String[10];
public String[] Designation
{
    get;
    set;
}

setただし、このセクションを使用したことがないことに注意してください。したがって、次のように、それをさらに単純化できます。

Designation = new String[10];
public String[] Designation {get;private set;}

これにより、クライアントコードがオブジェクトの下から配列全体を完全にスワップアウトするのを防ぎますが、それ以外の場合は、配列プロパティの全機能を提供します。アレイに独自のバッキングストアを提供する場合は、機能を失うことなく、セッターを完全に取り除くこともできます。

private string[] _designation = new string[10];
public string[] Designation {get {return _designation;} }

しかし、もう1つしわを追加しましょう。初期化する前に配列に割り当てたいというあなたの願望は、それがどれだけ大きくなるかを実際には知らない可能性があることを私に示しています。その場合は、配列ではなく、ある種のコレクションが必要になる可能性があります。ジェネリックリストは、配列の便利で非常に互換性のある代替品です。これは次のようになります。

private List<string> _designation = new List<string>();
public List<string> Designation {get {return _designation;}}

配列の場合と同じように、インデックスでそのリスト内のアイテムにアクセスできます。今心配する必要がある唯一の違いは、新しいアイテムを追加する方法です。

UserProfession.Designation.Add(txt_Search.Text);    

また、.ToString()呼び出しを削除したことにも注意してください。.Textプロパティはほぼ確実にすでに文字列であるため、.ToString()メソッドを呼び出すのはばかげています。

于 2013-01-02T04:10:03.867 に答える
0

現在はnullであるため、使用する前に値を初期化する必要があります。コンストラクター関数に初期化コードを追加することをお勧めします。

于 2013-01-02T04:05:55.093 に答える