最佳实践 - C#字典项访问

时间:2011-03-08 21:56:57

标签: c# design-patterns

这是我的代码

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 ?
         }
    }
}

值集合来自Web界面,因此可能存在一些无效数据。

我的问题是,如果字典不包含当前值,应该怎么做?

应该抛出异常还是只是跳过当前循环?

此代码为网格生成行..

4 个答案:

答案 0 :(得分:2)

如果项目不存在,您应该使用TryGetValue,它将返回null。我会避免这类事情的例外,因为它们可能代价高昂。

答案 1 :(得分:1)

  

我的问题是,如果字典不包含当前值,应该怎么做?应该抛出异常还是只是跳过当前循环?

您没有向我们提供足够的域名信息来回答这个问题。这真的取决于您的计划的要求/期望。缺少数据是预期的情况吗?您的程序可以处理它并仍然满足自己的要求吗?如果答案是肯定的,那么请妥善处理。如果答案是否定的,那么这是一个致命的例外,你的双手被束缚。

答案 2 :(得分:1)

这取决于,有3种可能性:

  1. 如果用户应该知道某些事情是错的,并且你想要取消行代 - 抛出一些东西
  2. 如果用户应该知道他输入了错误并且您不想取消行生成 - 将所有未找到的值添加到列表中并将其显示为错误。
  3. 如果用户不知道是否有问题,请忽略它们。

答案 3 :(得分:1)

例外情况是与软件通信,而不是与用户通信。鉴于你向我们展示的内容,我无法想到抛出异常的单一情况。

由于您正在生成网格,因此此代码应在单元格中创建一个空单元格或显示“未提供”,具体取决于您希望用户体验的内容。

如果没有值,则无法继续,请向用户显示错误消息。