2011-03-08 70 views
0

這裏是我的代碼最佳實踐 - C#字典項訪問

public void DoSomethin(IEnumerable<string> values) 
{ 
    Dictionary<string, string> d = GetDictionary(); 

    foreach(var value in values) 
    { 
     if(d.Contains(value)) 
     { 
       //Do something 
     }else{ 
       // What now ? 
     } 
    } 
} 

的收藏價值是由一個網絡界面正在添加,所以可能會有一些無效數據。

我的問題是,如果字典不包含當前值,應該怎麼辦?

應該拋出異常還是跳過當前循環?

該代碼可用於網格生成行..

+2

這的確符合您的要求/設計?我們不知道? btw,d.TryGetValue可能更容易 – 2011-03-08 21:59:25

回答

1

例外情況是與軟件通信,而不是用戶通信。鑑於你向我們展示了什麼,我想不出一個適合拋出異常的情況。

由於您正在生成網格,因此此代碼應該創建一個空單元格或在單元格中顯示「未提供」,具體取決於您希望用戶體驗的內容。

如果您無法繼續執行此值,請向用戶顯示錯誤消息。

2

您應該使用TryGetValue這將返回null,如果該項目不存在。我會避免這種類型的事情的例外,因爲它們可能是昂貴的。

+0

問題不在於如何處理低級別的缺失值,它似乎是關於如何應用程序應該繼續遇到這種情況,我們無法回答提供的信息已經給出。 – 2011-03-08 22:02:53

1

我的問題是,如果字典不包含當前值,應該怎麼辦?應該拋出異常還是跳過當前循環?

您還沒有給我們足夠的域信息來回答這個問題。這實際上取決於您的計劃的要求/期望。缺少數據是否是預期的情況?你的程序能處理這個問題,是否仍然符合自己的要求?如果答案是肯定的,那就適當處理。如果答案是否定的,那麼這是一個致命的例外,你的雙手被束縛住了。

1

這要看,有3個possiblities:

  1. 如果用戶應該知道什麼是錯的,你想取消行發生 - 扔東西
  2. 如果用戶應該知道,他輸入了什麼東西錯了,你不要要取消行生成 - 將所有未找到的值添加到列表中,並將它們顯示爲錯誤。
  3. 如果用戶不應該知道是否有問題,請忽略它們。