C# 指向对象的指针

标签 c# pointers observablecollection

这里有一个小背景故事。我有一个公共(public)属性(property)(typeof(ObservableCollection<Area>))我绑定(bind)了一个 TreeView 。我想更新树,但我不想重绘整个树并丢失所选项目、节点的折叠/展开状态以及我忘记实现的任何其他内容。所以我想我需要更新集合中的区域。我注意到使用 FirstOrDefault 语句并将其设置为等于某个值实际上并不会更改可观察集合中的区域:

var areas = GetAreaInfo(); //Entity Framework query returns ObservableCollection<Area>
foreach (Area a in areas)
{
    var αrea = Areas.FirstOrDefault(α => α.Id == a.Id);
    if (αrea != null)
        αrea = a;  //αrea changes, but Area[0] which is supposed to be αrea doesn't
}

我可以获取对象的引用或指针,这样我就不必遍历可观察集合并使用索引吗?

最佳答案

你实际上并没有做你认为自己在做的事情。在你的情况下,面积只是一个变量。当您设置area = a时,您将重置“area”变量指向的位置,而根本不会更改可观察集合。

最好的办法是更新area的所有属性以匹配a的属性。通常很容易编写 Clone 或 Copy 方法将属性从对象的一个​​实例复制到另一个实例。您的另一个选择是从集合中删除区域并添加一个区域,但这可能会导致一些排序问题。

编辑:关于您的实际问题,是的,可能在 C# 中获取指针,但这是一个坏主意。这将需要编写更多的工作,需要您将代码标记为不安全,并且将来的维护将更加困难。

关于C# 指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11613490/

相关文章:

c# - ObservableCollection 如何触发 Replace 操作?

c# - 用另一个 ObservableCollection 替换整个 ObservableCollection

C#开关变量初始化: Why does this code NOT cause a compiler error or a runtime error?

c# - 如何覆盖 ScintillaNet 中的 PASTE 操作?

c# - 防止C#中的重复字符串

c++ - Reverse String (Leetcode) 使用 C++,为什么我不能将新字符串作为方法返回

c++ - 基于指针类型的参数重载函数的最佳方法 |引用?

C# : Show dialog on UI thread from another thread

c++ - C++ 中的 char 数组和指向 char 的指针

c# - 从列表创建可观察集合时,对象引用未设置为对象的实例