以简写方式实例化嵌套类

时间:2014-01-21 00:24:49

标签: c#

我正在尝试以这种格式填充对象列表,以便它匹配我所需的API的JSON.NEt输出。但是我在从.Add()开始的整个块上得到一个NullReferenceException ...我错过了什么?

 foreach(var item in emailsToUpload.payload)
    {
        hubPayload.Add(new HubEmailItem()
        {
            email = item.Email, properties = 
            { new HubEmailTuple() { property = "date", value = (DateTime.Now).ToString("d") },
              new HubEmailTuple() { property = "other property", value = "other value" }
            }
        });
    }

更新:

public class HubEmailItem
{
    public String email { get; set; }
    public List<HubEmailTuple> properties { get; set; }
}

2 个答案:

答案 0 :(得分:2)

您不能将此语法用于此类通用列表。

properties = 
        { new HubEmailTuple() { property = "date", value = (DateTime.Now).ToString("d") },
          new HubEmailTuple() { property = "other property", value = "other value" }
        }

您应该添加new List<HubSpotEmailTuple>

properties =  new List<HubSpotEmailTuple>
        { new HubEmailTuple() { property = "date", value = (DateTime.Now).ToString("d") },
          new HubEmailTuple() { property = "other property", value = "other value" }
        }

注意:这是有效的:

int[] a = {0, 2, 4, 6, 8};

但这不是:

// wrong
List<int> a = {0, 2, 4, 6, 8};

// correct
List<int> a =  new List<int> {0, 2, 4, 6, 8};

查看文档:{​​{3}}

答案 1 :(得分:1)

在初始化List的情况下,唯一可以抛出此异常的是您正在迭代的项目之一。您正在使用Email属性,似乎其中一个项目为null并导致异常。

email = item.Email //causes NullReferenceException when item is null

您可以通过在item == null为真时触发的foreach循环的第一个大括号设置条件断点来检查是否确实如此。