这是访问数据库的只读属性的常见做法吗

发布于 2024-11-01 19:24:25 字数 362 浏览 1 评论 0原文

如果我在一个通过数据库填充的对象上有一个只读属性,这是我应该做的,还是有更好的方法来确保它已经被评估?

private List<Variable> _selectedVariables;
public new List<Variable> SelectedVariables
{
    get
    {
        if (_selectedVariables == null)
        {
            _selectedVariables = SomeFunctionThatCallsDB();
        }
        return _selectedVariables;
    }
}

If I have a read-only property on an object that fills itself via the DB, is this what I should be doing, or is there a better way to make sure it's already been evaluated?

private List<Variable> _selectedVariables;
public new List<Variable> SelectedVariables
{
    get
    {
        if (_selectedVariables == null)
        {
            _selectedVariables = SomeFunctionThatCallsDB();
        }
        return _selectedVariables;
    }
}

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

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

发布评论

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

评论(1

故事还在继续 2024-11-08 19:24:25

对于单线程来说这很好;但如果在多线程获取的情况下,您就会遇到问题。

编辑:线程安全:

简单的线程安全模式:

private readonly object _objectLock = new object();
private List<T> _someList = null;

public List<T> MyStuff
{
    get
    {
         if(_someList == null)
         {
             lock(_objectLock)
             {
                  if(_someList == null)
                     _someList = LoadFromDB();
             }
         }

         return _someList;
    }
}

您检查是否设置,然后锁定,然后再次检查以确保覆盖竞争条件。

That's fine for a single thread; but you will have problems if that is going to be in a situation where you have multithreaded gets.

EDIT: Threadsafing:

Simple Threadsafe pattern:

private readonly object _objectLock = new object();
private List<T> _someList = null;

public List<T> MyStuff
{
    get
    {
         if(_someList == null)
         {
             lock(_objectLock)
             {
                  if(_someList == null)
                     _someList = LoadFromDB();
             }
         }

         return _someList;
    }
}

You check to see if set, then lock, then check again to make sure you covered the race condition.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文