C# 如果字典不包含键,可以抛出异常吗

C# 如果字典不包含键,可以抛出异常吗,c#,C#,我正在编写一些代码,从对象中获取属性,并使用它们填充pdf 我用于从字典中获取项目的代码如下: public static int? GetYPrintCoord(string word) { // Try to get the result in the static Dictionary PrintCoord result; if (Dict.TryGetValue(word, out r

我正在编写一些代码,从对象中获取属性,并使用它们填充pdf

我用于从字典中获取项目的代码如下:

        public static int? GetYPrintCoord(string word)
        {
            // Try to get the result in the static Dictionary
            PrintCoord result;
            if (Dict.TryGetValue(word, out result))
            {
                return result.Y;
            }
            else
            {
                return null;
            }
        }
字典看起来像:

Dictionary<string, PrintCoord> Dict = new Dictionary<string, PrintCoord>();

这种做法不好/不可取吗?从用户的角度来看,抛出异常和崩溃实际上会好得多,因为这样至少用户不会查看无效的pdf,并且可能不知道它是无效的。

您正在重新发明轮子,这是内置行为,除非您在抛出异常之前需要做一些日志记录:

PrintCoord result = Dict[word]; // is equivalent to your code.
如果找不到密钥,将引发异常


因此,基本上,如果希望在字典中找不到密钥,并且您对此没有意见,您可以使用
TryGetValue
。第二种情况是,如果您不想使用
try…catch
,只需使用一个简单的if语句来处理key not found的情况。

异常,顾名思义,表示异常情况

如果在字典中找不到钥匙这一事实表明在其他地方出了问题,也就是说,这不是应该发生的事情,那么例外可能是有意义的


也就是说,如果期望有时找不到所需的密钥,那么异常可能没有意义。您可以将
GetYPrintCoord
方法重命名为
TryGetYPrintCoord
。然后你让这个方法产生一个布尔值,
True
如果找到了键,
False
如果没有,然后使用
out
关键字传回字典中的值。

我投票将这个问题作为主题外的问题结束,因为它属于以下问题:键应该在字典中吗?如果它应该简单地访问(如下所示),那么您是否喜欢编写比需要更多的代码?为什么不直接索引到字典中,让它抛出
KeyNotFoundException
?相反,您使用的是另一种访问机制(
TryGetValue
),该机制旨在避免引发该异常,因为您不希望发生异常。@MegaTron-我不知道存在CodeReview。好的观点。在代码审查时,假设A)代码有效,B)代码在任何方面都不是假设的或不完整的,这可能是可以的。这是个愚蠢的问题。我以前很少用字典。
PrintCoord result = Dict[word]; // is equivalent to your code.