我有一个棘手的问题让我困惑了一段时间。我有以下代码声明......
namespace ESEGURCI.WEB.BusinessLogicLayer.Commons
{
public static class ParameterUtilities
{
public enum ParameterEnum
{
MAX_LOGIN_ATTEMPTS,
AUDIT_MODIFICATIONS
}
}
}
我调用这样的代码“ ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS ”问题是每个满月一次我得到错误“对象引用没有设置为对象的实例”在这一行。 ..这就像代码只有99.9%的时间有效...
我发现的唯一事情是,因为枚举是一种值类型,当调用静态类时,枚举可能有空......但我找不到有关此行为的任何文档...
有人可以告诉我为什么会这样吗?我知道我应该从静态类中删除枚举,并将枚举声明为独立但我想知道为什么会发生这种情况......
谢谢, 小号
更新
好的,对于要求更多代码的每个人,以下是发生错误的完整功能......
public static int GetPageSize(int companyId)
{
int pageSize = 0;
// error happens bellow this line
ESEGURCI.WEB.BusinessLogicLayer.Entities.Parameter parameter = ESEGURCI.WEB.BusinessLogicLayer.Entities.Parameter.GetParameter(ParameterUtilities.ParameterEnum.AUDIT_MODIFICATIONS.ToString(), companyId);
// error happens above this line
int.TryParse(parameter.Value, out pageSize);
return pageSize;
}
答案 0 :(得分:7)
ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS
都不会抛出空引用异常。错误可能是由同一行上的其他指令触发的(赋值给变量?)。
答案 1 :(得分:2)
enum
不能是null
。
按照下面的清单拆分该行,看看哪个语句抛出异常。我打赌它发生在Parameter.GetParameter()
:
using ESEGURCI.WEB.BusinessLogicLayer.Entities;
// ...
var auditModifications =
ParameterUtilities.ParameterEnum.AUDIT_MODIFICATIONS.ToString();
var parameter = Parameter.GetParameter(auditModifications, companyId);
答案 2 :(得分:1)
枚举(和任何其他类型)不能具有空值,因为它不是一个类型的值。
异常是由别人抛出的。
答案 3 :(得分:1)
如前所述,您的enum
不会出现错误。根据您的更新,我会说NRE很可能来自您的GetParameter
方法。