在 Nhibernate 中使用 IList,未初始化

发布于 2024-10-04 12:32:46 字数 862 浏览 2 评论 0原文

我基本上有:

Public Class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual List<Item> JobItems {get;set;}
}

我正在使用一个列表并在构造函数中初始化它(JobItems = new List();)。但是,我遇到了异常(Nhibernate.Collection.Generic.PersistentGenericBag)

我读了 这个问题 它说我应该使用 IList 代替。

所以现在我有

public class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual IList<Item> JobItems {get;set;}
}

public virtual void AddItem(Item item)
{
     //snip validation
     this.JobItems.Add(item);
}

但是,它抛出 NullReferenceException 因为 JobItems 尚未初始化。 NHibernate 什么时候初始化这个集合?或者我该如何解决这个问题?

I basically have:

Public Class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual List<Item> JobItems {get;set;}
}

I was using a List and initializing it (JobItems = new List();) in the constructor. However, I was getting an Exception (Nhibernate.Collection.Generic.PersistentGenericBag)

I read this question and it said I should use IList instead.

So now I have

public class Job: MyBaseClass
{
    public virtual string JobInformation {get;set;}
    ...
    public virtual IList<Item> JobItems {get;set;}
}

public virtual void AddItem(Item item)
{
     //snip validation
     this.JobItems.Add(item);
}

However, it throws a NullReferenceException because JobItems isn't initialized yet. When does NHibernate initialize this collection? Or how can I solve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尐偏执 2024-10-11 12:32:46

使用支持字段并在返回时确保它不为空

public IList<Item> JobItems
{
    get { return _jobItems ?? (_jobItems = new List<Item>()); }
    set { _jobItems = value; }
}

use a backing field and on return make sure it isn't null

public IList<Item> JobItems
{
    get { return _jobItems ?? (_jobItems = new List<Item>()); }
    set { _jobItems = value; }
}
左岸枫 2024-10-11 12:32:46

如果之前尚未初始化该集合,则应该对其进行初始化。

private IList<Item> _jobItems;
public IList<Item> JobItems
{
    get
    {
        return _jobItems ?? (_jobItems = new List<Item>());
    }
    private set
    {
        _jobItems = value;
    }
}

You should initialize the collection if it hasn't been previously initialized.

private IList<Item> _jobItems;
public IList<Item> JobItems
{
    get
    {
        return _jobItems ?? (_jobItems = new List<Item>());
    }
    private set
    {
        _jobItems = value;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文