2016-09-15 1 views
0

これまでに辞書(Dictionary)をConcurrentDictionaryに変更して修正しました。 しかし、私が物事を変えたとき(辞書は同じままです)、物事は間違っていました。これは、リストがこのメソッドからであるnullであると言う http://pasted.co/fd94e190TryAdd()のときにConcurrentDictionaryがNullReferenceExceptionをスローします。

は、ここに私の完全なコードです。

Models.GridData getCurrentGrid() 
    { 
     Models.GridData data = new Models.GridData(); 
     for (int i = 0; i < metroGrid1.Rows.Count; i++) 
     { 
      foreach (var item in metroGrid1.Rows[i].Cells) 
      { 
       if (item is DataGridViewCell) 
       { 
        Models.CellData cellData = new Models.CellData(); 
        DataGridViewCell cell = item as DataGridViewCell; 
        cellData.column = cell.ColumnIndex; 
        cellData.row = cell.RowIndex; 
        if (string.IsNullOrEmpty((string)cell.Value) && string.IsNullOrWhiteSpace((string)cell.Value)) 
        { 
         cellData.value = string.Empty; 
        } 
        else { 
         cellData.value = cell.Value; 
        } 
//Occurs here right now 
        data.List.TryAdd(cellData.column.ToString() + " " +  cellData.row.ToString(),cellData); 
       } 
      } 
     } 
     return data; 
    } 


void Save() 
    { 
     Models.GridData data = new Models.GridData(); 
     data = getCurrentGrid(); 
     unsavedChanges = false; 


     StreamWriter writer = new StreamWriter(path); 
     writer.AutoFlush = true; 
     writer.Write(JsonConvert.SerializeObject(data.List)); 
     writer.Close(); 
     MetroFramework.MetroMessageBox.Show(this, "Başarıyla kaydedildi", "Yoklama Listesi-Talha Açıkgöz", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); 
    } 

EDIT:Models.cs = http://pasted.co/13a7cb1c私は、あなたのすべてに感謝することを固定

+3

を追加し、[MCVE]でこれを再現してみてください。多くの場合、実際のコードを最小限の例に減らすプロセスによって、問題が明らかになります。 –

+0

@JonSkeetありがとうございます、私はそれを試しますが、今は非常に限られた時間を持っています:\ –

+0

'Save'メソッドで' data.List'の初期化が表示されません。 – kiziu

答えて

0

。特に@kiziuのおかげです。ハードコーディングされたデータと理想的にアプリのコンソール - 私はむしろ他の場所で長いコードにリンクするよりも、

data.List = new ConcurrentDictionary... 
関連する問題