2

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

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

4 回答 4

7

ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS无论月球长什么样,都不会抛出空引用异常。该错误可能是由同一行上的其他指令触发的(分配给变量?)。

于 2012-09-04T10:58:01.157 回答
2

一个enum不可能null

按照下面的清单拆分该行并查看哪个语句引发了异常。我敢打赌它发生在某处Parameter.GetParameter()

using ESEGURCI.WEB.BusinessLogicLayer.Entities;

// ...

var auditModifications = 
    ParameterUtilities.ParameterEnum.AUDIT_MODIFICATIONS.ToString();
var parameter = Parameter.GetParameter(auditModifications, companyId);
于 2012-09-04T11:28:17.403 回答
1

枚举(和任何其他类型)不能有空值,因为它不是一个值而是一个类型。

异常是由其他东西引发的。

于 2012-09-04T10:58:45.413 回答
1

如前所述,您enum不会是错误的来源。根据您的更新,我会说 NRE 很可能来自您的GetParameter方法。

于 2012-09-04T11:26:55.320 回答