私有静态集合的获取/设置?

3

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

 private ObservableCollection<Job> allJobs;

访问(Access)的定义如下:

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

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

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

有什么想法吗?


请注意,属性应该读作“ObservableCollection<Job>”,不知道“<Job>”部分发生了什么。 - user1017882
3
你的意思是丢失了吗?你不能执行 AllJobs.Add(newItem) 吗? - Ray
代码中的集合是私有的,但不是静态的。这个问题是关于什么的? - Tigran
2个回答

4
你所说的“lost methods”是什么意思?你尝试过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; } 
    } 
}

@DanielMcNulty:当你尝试时,你得到了什么错误信息?说它不起作用比一个错误消息更好。 :) - Chris
@DanielMcNulty 所以执行 PresentationManager.Instance.AllJobs.Add(newItem) - Ray
是的,雷,那就是我在“main”方法中编写的准确代码行。 它不喜欢它,没有错误消息,它只停止执行load方法中其余的代码,但它实际上并没有崩溃应用程序!? - user1017882
你是否在它周围有任何的 try/catch 代码?我注意到你似乎从未将 allJobs 集合设置为有效的集合 - 可能会在某处捕获到 null 引用异常。 - Johannes Kommer
@DanielMcNulty - 请使用新代码编辑您的问题。评论是为了让人们请求更多信息。这些信息应该被编辑到问题或答案中,而不是作为新评论提供。 - ChrisF
显示剩余4条评论

1
通常情况下,您不会为这样的属性设置setter,因为在使用setter时,您将失去绑定到ObservableCollection的所有事件。 public ObservableCollection<Job> AllJobs { get; private set; }

它的行为很奇怪,代码在我添加到集合的那一行中出现了错误,但即使在调试模式下也没有告诉我任何异常被抛出。我得回来时再开一个线程,因为这让我感到困惑。 - user1017882
这是一个非常好的观点,尽管严格来说它不是问题的答案,但我给予了+1的支持。 :) - Chris
@DanielMcNulty:向我们展示你正在添加的代码行,让我们来研究一下它是出了什么问题,或许能给你提供更多帮助。 - Chris
Job job5 = new Job(); job5.Task= "ToDoSomething"; PresentationManager.Instance.AllJobs.Add(job1);新建一个工作任务 job5; 将其任务设置为“ToDoSomething”; 将该任务添加到 PresentationManager 的所有工作任务列表中。 - user1017882

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接