【发布时间】:2012-09-04 10:55:18
【问题描述】:
我有一个棘手的问题困扰了我一段时间。我有以下代码声明...
namespace ESEGURCI.WEB.BusinessLogicLayer.Commons
{
public static class ParameterUtilities
{
public enum ParameterEnum
{
MAX_LOGIN_ATTEMPTS,
AUDIT_MODIFICATIONS
}
}
}
我这样称呼代码“ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS” 问题是每个满月我都会在这一行收到错误“对象引用未设置为对象的实例”。 .. 就像代码只在 99.9% 的情况下有效...
我唯一想到的是,由于枚举是一种值类型,因此在调用静态类时枚举可能为空......但我找不到任何关于这种行为的文档...
有人能告诉我为什么会这样吗?我知道我可能应该从静态类中删除枚举,并将枚举声明为独立的,但我想知道为什么会首先发生这种情况......
谢谢, S
更新
好的,对于要求更多代码的每个人,以下是发生错误的完整功能......
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;
}
【问题讨论】:
-
为什么不在课堂之外使用
Enum定义? -
这一行不能用 NullReference 抛出,你确定错误不在其他语句中吗?请显示更多代码你如何使用枚举值
-
异常源于违规行中的其他内容,枚举不能为空。你能告诉我们发生异常的实际代码块吗?
-
这不能抛出空引用异常。通过您提到的那一行,这意味着您正在获取该类型的 2 个可能值之一。抛出空引用异常的这一行类似于数字 1 或字符串“C# is a language”正在抛出空引用异常。此外,“对象引用未设置为对象的实例”意味着您正在尝试访问尚未初始化或分配值的 ref 类型对象。贴一些代码。
-
GetParameter 可能有问题。将此语句放在 try 块中并捕获异常。另外,当你得到异常时,检查枚举的值,你就会知道枚举不是问题。
标签: c# enums static-class