2016-08-11 6 views
0
int count = 0; 

foreach (string s in Settings.Default.Name) 
{ 
    count++; 
} 

Settings.Default.Name[count] = tb_add_name.Text; 
Settings.Default.Save(); 

Settings.Default.Name空の文字列配列があるが、foreachのすべきではとNullReferenceExceptionを得るのですか?なぜ私はこのforeachの方法

配列は後で単語で埋められます。

+0

Settings.Default.Nameと空の配列ので、どのようにforeachのそれを超えるinterate、それはNullRefferenceException – Mostafiz

+1

をスローする必要があります 'NullReferenceException'には、2つの原因がここにあります:' Settings.Default.Name'がnullであるのどちらか(どの*空の文字列配列ではない*)、または 'tb_add_name'がnullであることを意味します。エラースタックトレースは、これらのどれかを示します。 – poke

答えて

2

はい、それはインデックスが有効かnullの場合あなたはまだチェックすべきカウントはまだ0で、あなたはまだ Settings.Default.Name[count] = tb_add_name.Text;

を実行しているという事実は変わりません。ような何か:ところで

if(Settings.Default.Name != null && Settings.Default.Name.Count > 0) 

あなたのforeachループは、基本的には配列のサイズにあなたのcount変数を設定し、Array[Array.Length]が範囲外常にあるので、あなたのメソッドは常にIndexOutOfRange例外につながります。

+0

空の列挙型を反復処理することができます。したがって、カウントがゼロになることは何も問題ありません。しかし、ループの後、 'count'が値' Settings.Default.Name.Count'(すなわち最後のインデックスよりも1つ)を有し、インデックス範囲外の値を設定することができないので、OPのコードは依然として失敗する。実際に要素を追加する必要があります(そのためにはインデックスは必要ありません)。 – poke

+0

コードを試しましたが、 "Settings.Default.Name.Count> 0"が機能しません エラーが発生しました:演算子 '>'を 'メソッドグループ'と 'int'型のオペランドに適用できません – Julian

+0

ああ、今はエラーNullReferenceExceptionはここにあります: 'Settings.Default.Name [count] = tb_add_Name.Text' 'count'は0であり、 'tb_add_Name.Text'は空でもnullでもありません – Julian

0

アレイLengthプロパティを使用できます。

if(Settings.Default.Name.Count > 0) 
{ 
    int count = 0; 

    foreach (string s in Settings.Default.Name) 
    { 
     count++; 
    } 

    Settings.Default.Name[count] = tb_add_name.Text; 
    Settings.Default.Save(); 
} 
+0

'Settings'は' Length'プロパティを持たず、明らかにスローされているnull参照例外を防ぐことはできません。 – poke

+0

私は自分の答えを更新しました。私はカウントが足りない – Developer

関連する問題