简单的 get/set 非规范化字符串列表 - 触发 set 的混乱解决方案

Easy get/set of denormalized list of strings - messy solution to triggering `set`

我正在将一对多非规范化为 List<int>:

    public string DbUsersMessaged { get; set; }
    public List<int> UsersMessaged {
        get {
            return string.IsNullOrEmpty(DbUsersMessaged) ? new List<int>() : DbUsersMessaged.Split(',').Select(Int32.Parse).ToList();
        }
        set {
            DbUsersMessaged = value != null ? String.Join(",", value) : null;
        }
    }

阅读,我可以查询UsersMessaged.Contains(id)

为了写作,我想简单地做 UsersMessaged.Add(id),但这不起作用,因为没有调用 set

现在,我这样做是为了触发 set

  UsersMessaged = UsersMessaged.AddReassign(user);
  public static List<int> AddReassign(this List<int> list, int item)
    {
        var tempList = list;
        if (list.Contains(item))
            return list;
        tempList.Add(item);
        list = tempList;
        return list;
    }

但这太糟糕了,因为下周我会忘记我不能只做 Add 并浪费大量时间来记住这些废话。设置非规范化 List<T> 的更简洁方法是什么?

更简洁的方法是实现您自己的 List 并覆盖 Add 方法

public class DbList : List<int>
{
    public override void Add(int value)
    {
        //perform your logic here.
    }
}

并且您可以在 DbList 实例中拥有您的字符串值。