简单的 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 实例中拥有您的字符串值。
我正在将一对多非规范化为 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 实例中拥有您的字符串值。