当我运行此代码时,我得到了一个不寻常的空引用。
澄清一下,我了解什么是 null 引用,此方法中使用的任何值在运行时都不是 null。空引用似乎在 mscorlib 中的某个地方,到目前为止,我一直找不到任何报告类似问题的人。
功能是一个包含 10 个左右项目的枚举。
private Dictionary<Feature, bool> dict = new Dictionary<Feature, bool>();
public bool AddFeature(Feature val)
{
if (!dict.ContainsKey(val))
{
dict.Add(val, false);
return true;
}
else
return false;
}
特征
[Flags]
public enum Feature
{
[Description("Other")]
Other = 0x00000000,
[Description("Analysis")]
Analysis = 0x00000001,
[Description("Campaign")]
Campaign = 0x00000002,
[Description("Trends")]
Trends = 0x00000004,
[Description("Portal")]
Portal = 0x00000008,
[Description("Phone")]
Phone = 0x00000010,
[Description("Rents")]
Rents = 0x00000020,
[Description("Repairs")]
Repairs = 0x00000040,
[Description("Maintenance")]
Maintenance = 0x00000080,
[Description("Management")]
Management = 0x00000100,
[Description("Services")]
Services = 0x00000200,
[Description("All")]
All = 0x7FFFFFFF
}
错误是:
mscorlib 中发生了类型为"System.NullReferenceException"的异常.dll但未在用户代码中处理
其他信息:对象引用未设置为对象的实例。
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at Test.Model.EnabledFeatures.AddFeature(Feature val) in C:SandboxTestSharedModelEnabledFeatures.cs:line 26
我已经单步执行了我的代码,错误发生在
dict.Add(val, false);
线。当我在这一点上休息时,dict
和val
都不是空的,两者都有其预期值。
这段代码曾经有效,然后我离开了它几个星期,回来发现它失败了。我想知道某些Windows或Visual Studio更新是否会破坏这一点?
仍然不确定问题是什么,但现在我已经通过重新安装 .net 和我的许多 Visual Studio 组件和包来修复它。