这是一个菜鸟问题,我知道,但我没有在互联网上找到答案......
我得到以下词典:
private static Dictionary<Qb.Solution.QbDataStore.DataStoreType, string> DataStoreType2IconPath = new Dictionary<QbDataStore.DataStoreType, string>()
{
{ Qb.Solution.QbDataStore.DataStoreType.CommonData, "Common" },
{ Qb.Solution.QbDataStore.DataStoreType.ApplicationData, "Application" },
{ Qb.Solution.QbDataStore.DataStoreType.FrameData, "Frame" }
};
然后我有一个Qb.Solution.QbDataStore.DataStoreType dataType
参数的方法,我得到了这个:
if (dataType != null)
{
collection.IconPath = DataStoreType2IconPath[dataType];
}
我的问题是:
如果我删除if
测试,并且我不知道(理论上不可能)dataType为null:
答案 0 :(得分:3)
它会抛出一个异常,所以你用if测试会更好。
您也可以使用TryGetValue执行此操作:http://msdn.microsoft.com/fr-fr/library/bb347013.aspx
答案 1 :(得分:2)
如果您尝试从字典中检索不存在的条目,则会引发KeyNotFoundException
,请参阅MSDN documentation。如果这不是您想要的行为,请改用TryGetValue方法。
答案 2 :(得分:2)
根据我的快速测试,向字典添加空键会导致ArgumentNullException
并尝试检索不存在的密钥会导致KeyNotFoundException
。
namespace ConsoleApplication46
{
internal class Program
{
private static void Main(string[] args)
{
var d = new Dictionary<string, int>();
d.Add(null, 1);
Console.WriteLine(d["adam"]);
Console.Read();
}
}
}
关于如何最好地编写代码的代码,请尝试https://codereview.stackexchange.com/
替代方法包括TryGetValue
和ContainsKey
。
答案 3 :(得分:1)
如前所述,您无法在字典中添加空键 - http://msdn.microsoft.com/en-us/library/k7z0zy8k.aspx
您可能希望使用ContainsKey()方法检查密钥是否存在,而不是使用TryGetValue或捕获异常。 (你仍然需要一个带有TryGetValue的if语句,如果你能提供帮助,最好不要使用逻辑异常进行编程。)
if (DataStoreType2IconPath.ContainsKey(dataType))
{
collection.IconPath = DataStoreType2IconPath[dataType];
}
如果确实想要避免使用if语句,则可以使用条件运算符:
collection.IconPath = DataStoreType2IconPath.ContainsKey(dataType) ?
DataStoreType2IconPath[dataType] : null;
我个人更喜欢这种“表达”式的编程而不是语句,但那只是我。 : - )