你调用的对象是空的。我无法解决的错误

时间:2013-08-16 06:29:02

标签: c# asp.net-mvc

我有这个代码(这只是一个代码段):

public static CpOfferInterfaceInfo Get()
    {
        return new CpOfferInterfaceInfo
         {
             Roles = new List<Role>
             {
                new Role
                {
                    RoleType = RoleType.Cp,
                    Statuses = new List<Status>
                    {
                        new Status
                        {
                            StatusEnum = StatusEnum.CpCreatedNew,
                            DisplayAs = "Sent",
                            Functions = { 1,2,3 }

                        },
                        new Status
                        {
                            StatusEnum = StatusEnum.NcpDeclined,
                            DisplayAs = "Declined",
                            Functions = { 4 }

                        },

在当天早些时候正常工作,我改变了一件小事(Function = {1,3,5}子句),现在我收到了这个错误:

对象引用未设置为对象的实例。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

来源错误:

Line 11:         public static CpOfferInterfaceInfo Get()
Line 12:         {
Line 13:             return new CpOfferInterfaceInfo
Line 14:              {
Line 15:                  Roles = new List<Role>

这是状态的C#类:

public class Status
    {
        public StatusEnum StatusEnum { get; set; }
        public string DisplayAs { get; set; }
        public ICollection<int> Functions { get; set; }
    }

代码编译但在运行时失败。有人对此有任何想法或经验吗?我可以更改/尝试/测试什么?

1 个答案:

答案 0 :(得分:7)

我怀疑以前你曾经:

Functions = new List<int> { 1,2, 3 }

在对象初始值设定项中构造的Status实例上设置属性。您当前的代码,如下所示:

Functions = { 1,2,3 }

只调用newObject.Functions.Add(1);(等) - 当Functions为空时,这是无效的,默认情况下是这样。

备选方案:

  • 返回显式创建集合
  • 更改您的Status代码,为您创建收藏集:

    public class Status
    {
        public StatusEnum StatusEnum { get; set; }
        public string DisplayAs { get; set; }
    
        private readonly ICollection<int> functions = new List<int>;
        public ICollection<int> Functions { get { return functions; } }
    }