c# - 通用列表更改计数器 C#
问题描述
我一直在尝试找到一种方法来做一些看起来很简单的事情,但我却一事无成。我只想在每次更新列表中的属性时增加一个计数器,但我不想写 ChangeCount++;在导致更改的每个 If 语句中,我希望它位于数据类中并且更加自动化。
我尝试在 DataClass 中编写一个 Set 方法,但效果不佳,因为我需要向它传递三个参数,它阻止了我使用 += 并且它与编写 ChangeCount++; 一样糟糕。我看着get;放; 尽管如果我添加了自动增量来获取计数,计数会正确上升,但在集合中它总是出现 0。我使用 INotifyPropertyChanged 查看了 ObservableCollection,但对于我想做的事情来说似乎过于复杂,尽管我确实觉得这可能是唯一的选择,但我对它的理解还不够,无法让它发挥作用。
任何帮助将非常感激。
public class DataClass
{
public int ChangeCount { get; set; }
public List<Item> items { get; set; }
public class Item
{
...
...
...
}
}
public class ProgramClass
{
public static void doStuff()
{
var dc = new DataClass();
dc.items = new List<Item>();
//List gets populated with lots of items...
//loop list items with lots of if statements leading to possible
//changes which should trigger the counter to increase.
//e.g.
dc.items[i].someProperty += 10;
//Now I want:
If (dc.ChangeCount > 0) BackupOriginalFileAndWriteNewFile();
}
}
更新:我只是偶然发现了这段代码,它似乎完全符合我的要求,尽管我仍然有兴趣看到其他建议。
((INotifyPropertyChanged)dc.items).PropertyChanged += (sender, e) =>
{
if (e.PropertyName != "Count")
dc.ChangeCount++;
};
好的,它仍然无法正常工作。如果我只是更改项目上的值并将其放回原处,则不算作更改,它必须是完全不同的项目。
解决方案
mb是这样的:
public class DataClass
{
public int ChangeCount => items.Sum(i => i.ItemChangeCount);
public List<Item> items { get; set; }
public class Item
{
public int ItemChangeCount { get; private set; } = 0;
private int _prop1;
public int Prop1
{
get => _prop1;
set { _prop1 = value; ItemChangeCount++; }
}
}
}
推荐阅读
- python - 在 Django View 中构建 JSON 以循环遍历
- javascript - 如何专注于页面加载后加载的元素
- java - Sybase 和 Oracle DB 之间的数据比较
- php - 第二个查询在硬编码时有效,但在我用 POST 变量替换 WHERE 条件时无效
- java - Java - 无法摆脱 while 循环
- typescript - 在库中包含自定义打字稿声明文件
- javascript - 如何在 javascript 中自动执行指令
- sql - 访问查询:不包括指定的表达式
- python - 将 Python 脚本应用于 Blender 中的大量 .obj 文件
- google-app-engine - Google Cloud 上的权限被拒绝 appcfg.py