我有这个代码(这只是一个代码段):
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; }
}
代码编译但在运行时失败。有人对此有任何想法或经验吗?我可以更改/尝试/测试什么?
答案 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; } }
}