带Enum的C#Static类

时间:2012-09-04 10:55:19

标签: c# enums static-class

我有一个棘手的问题让我困惑了一段时间。我有以下代码声明......

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;
    }

4 个答案:

答案 0 :(得分:7)

无论Moon看起来如何,

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方法。