【发布时间】:2017-05-15 23:16:42
【问题描述】:
运行此代码时,我得到一个不寻常的空引用。
澄清一下,我了解空引用是什么,此方法中使用的值在运行时都不是空的。空引用似乎在 mscorlib 中的某个地方,到目前为止,我找不到任何人报告类似问题。
Feature 是一个包含 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.dll 中发生了“System.NullReferenceException”类型的异常,但未在用户代码中处理
附加信息:对象引用未设置为对象的实例。
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:\Sandbox\Test\Shared\Model\EnabledFeatures.cs:line 26
我已单步执行我的代码,错误发生在
dict.Add(val, false);
线。当我在那个时候休息时,dict 和 val 都不是 null 并且都有它们的预期值。
这段代码过去可以工作,然后我离开它几个星期,回来发现它失败了。我想知道某些 Windows 或 Visual Studio 更新是否会破坏这一点?
【问题讨论】:
-
a) 看起来你想要一个 HashSet。 b) val 为 null 或 val 的值为 null 并且您有一个自定义比较器正在尝试使用该 null 值。
-
@john:事实并非如此。 OP 看起来对这个例外并不陌生。他无法思考的是这是从哪里发生的。
-
@CJM:还有其他线程将其设为空吗?
-
“特征”类是你的吗?如果是这样,当添加
val时,Dictionnary 类是否可以使用任何方法?像 GetHashCode 这样的东西?相比?还有什么?