【问题标题】:Get/Set for a Private Static Collection?获取/设置私有静态集合?
【发布时间】:2011-10-31 10:50:16
【问题描述】:

我定义了一个具有以下属性的类:

 private ObservableCollection<Job> allJobs;

访问定义如下:

    public ObservableCollection<Job> AllJobs
    {
        get
        {
            return this.allJobs;
        }
        set
        {
            this.allJobs = value;
        }
    }

当我将整个 ObservableCollection 分配给属性时,get 集可以正常工作,显然可以很好地检索它。但是为什么我失去了通常允许我“添加”(即向集合中添加 1 个作业)的所有方法?

目前我必须创建一个临时集合来填充,然后分配给 allJobs 属性,我不应该这样做。

有什么想法吗??

【问题讨论】:

  • 注意,该属性应该读作“ObservableCollection”,不知道“”位发生了什么。
  • 丢失是什么意思?你不能去AllJobs.Add(newItem)??
  • 代码中的集合是私有的,但不是静态的。这个问题是怎么回事?

标签: c# .net list collections


【解决方案1】:

“丢失的方法”是什么意思?你试过 AllJobs.Add() 吗?以下代码适用于我:

void Main()
{
    AllJobs = new ObservableCollection<Job>();
    AllJobs.Add(new Job());
}

public class Job { }

private ObservableCollection<Job> allJobs;

public ObservableCollection<Job> AllJobs
{
    get
    {
        return this.allJobs;
    }
    set
    {
        this.allJobs = value;
    }
}

编辑:

根据您的评论,我已将代码修改如下,但一切对我仍然有效,但我注意到您没有看到在任何地方初始化 allJobs 集合。

void Main()
{
    PresentationManager.Instance.AllJobs.Add(new Job());
}

public class Job { }

sealed class PresentationManager 
{ 
    public static readonly PresentationManager Instance = new PresentationManager(); 

    private PresentationManager()
    {
        allJobs = new ObservableCollection<Job>();
    }

    private ObservableCollection<Job> allJobs; 
    public ObservableCollection<Job> AllJobs 
    { 
        get { return this.allJobs; } 
        set { this.allJobs = value; } 
    } 
}

【讨论】:

  • 这对我不起作用。我们的代码之间的区别在于我使用的是单例实例化,我可能应该提到:sealed class PresentationManager { public static readonly PresentationManager Instance = new PresentationManager();私有 ObservableCollection allJobs; public ObservableCollection AllJobs { get { return this.allJobs; } 设置 { this.allJobs = value; } } }
  • @DanielMcNulty:您在尝试时会收到什么错误消息?使用错误消息说它不起作用要好得多。 :)
  • @DanielMcNulty 所以去PresentationManager.Instance.AllJobs.Add(newItem)
  • 是的,这正是我在“主要”方法 Ray 中编写的代码行。它不喜欢它,没有错误消息,它只是停止执行 load 方法中的其余代码,它实际上并没有破坏它。应用不会崩溃!?
  • BTW 为我在这里使用代码格式和评论表示歉意,这是我创建的第一个线程。
【解决方案2】:

通常您不希望此类属性使用 setter,因为在使用 setter 时您将丢失绑定到 ObservableCollection 的所有事件。

public ObservableCollection&lt;Job&gt; AllJobs { get; private set; }

【讨论】:

  • 这很奇怪,在我添加到集合中的行上的代码中断但即使在调试模式下也不会让我知道任何类型的异常被抛出。当我有更多细节时,我将不得不回来发表一个帖子,因为这让我感到困惑。
  • 一个很好的观点,尽管从技术上来说不是问题的答案,但我还是给了我一个 +1。 :)
  • @DanielMcNulty:向我们展示您正在添加的那一行正在中断,我们也许可以对事情进行一些额外的说明......
  • 工作 job5 = new Job(); job5.Task="ToDoSomething"; PresentationManager.Instance.AllJobs.Add(job1);
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 2014-01-06
  • 2021-12-29
  • 2014-11-10
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
相关资源
最近更新 更多