2

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

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

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

4

1 回答 1

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; } }
    }
    
于 2013-08-16T06:34:49.187 回答