2011-03-08 71 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. 如果用户不应该知道是否有问题,请忽略它们。