主题。比如有这样一个模型
public class SettingRedirect
{
public int Id { get; set; }
public int Identifier { get; set; }
public string Name { get; set; }
}
数据库中有几条记录,Identifier它们的序列号存储在其中。条目的序号偶尔会改变。例如,我们提取编号为 10 的对象,并通过设置编号 5 将其向上移动。但是编号为 5 的条目已经存在,事实证明我们需要这样做 10=>5=>6= >7=>8=>9=>10 。
您可以对数据库进行查询并一次选择所有记录,如果发生更改,那么我们Identifier对所有顺序较低的记录进行 +1。
一般来说,问题是是否有某种内置机制来实现序数,或者是否有一个简单的解决方案?
到目前为止,我只提出了一种愚蠢地做+1的方法。
我希望我正确理解了这个问题。
让我们同意对象的索引将具有名称索引(如果需要,您可以更改它)。
然后可以创建如下界面:
IIndex 接口将要求在需要的类中存在 Index 字段(在 ExampleClass 类的示例中)。
我们在 ExampleClass 类中实现接口:
List 数据类型提供了方便操作列表(添加、插入、删除等)的方法。这些方法可以更改索引的顺序(如在数组中)。
事实上,List 类已经为我们完成了所有关于索引的“脏”工作。我们只需要一个将列表中索引的实际值写入实现 IIndex 接口的类的 Index 属性的方法。使用 C#,您可以使用 where 关键字找出对象是否实现了接口。
最好向 List 类添加一个操作 Index 属性的方法。让我们创建自己的 ListIndex 数据类型:
在这个类中,我们继承了 List 的所有功能,但指出可以存在的对象必须实现 IIndex。
SortIndex 方法允许您将所有索引更新为实际值,但从 1 开始(如果您愿意,可以更改它)。
现在一切都准备好在实践中使用这个方案了。
文件结构:
在 Program.cs 中工作的示例:
结论:
PS:
为什么这么难?
没有自动增量的变体: