在列表中获取唯一索引?

在列表中获取唯一索引?

问题描述:

简短的版本是这样的:我有一个数据库。我有一个C#列表,我用来与该数据库进行交互。程序启动后,将数据转储到列表中,程序结束并将其保存回数据库。在列表中获取唯一索引?

这里是我的问题,但我要确保我的列表中(ID)的一个属性始终是唯一的,当我创建和删除列表项。我在想也许列表可能有类似于SQL自动增量的东西?或者也许只是一个数字索引,哪个项目位于哪个位置?

AddedDependents.Add(new Dependent 
        { 
         IsSpouse = isSpouse, 
         Id = /*unique id/* 
        }); 
+0

列表已订购,并已建立索引。你可以在列表中使用他们所在的位置。 AddedDependents [0] ... etc – 2012-08-09 16:48:26

+0

您的“保存到数据库”操作是否包含一个列表或一个项目?当你说'删除'时,它在数据库中是一个'软'或'硬'删除? – Channs 2012-08-09 16:49:06

+0

直到列表完成,数据库才被触动,然后保存。所有的操作都在列表中完成,然后删除数据库并使用新的列表数据重新创建 – proseidon 2012-08-09 16:50:18

你可以只使用列表索引:

AddedDependents.Add(new Dependent 
       { 
        IsSpouse = isSpouse, 
        Id = AddedDependents.Count 
       }); 

然后Dependent Id和列表索引相同,因此从列表中获取Dependent变得微不足道。

正如评论所说,如果你很可能会删除列表中的元素,那么你不能只是得到通过相关的标识,就像AddedDependents[dependent.Id]而是需要通过列表进行迭代:

AddedDependents.Where(d => d.Id == dependent.Id); 
+0

但是当你移除一个元素时会发生什么? – user844541 2012-08-09 16:54:21

+0

这是我最初做的,但问题是这样的:如果我有3个条目与ID 1,2,3,我删除2,并创建一个新的,那一个也有ID 3,给我两个与id = 3. – proseidon 2012-08-09 16:54:30

+0

诚然,在这种情况下删除元素是很麻烦的。你将无法只执行'AddedDependents [dependent.Id]',而是遍历列表来找到Id,这并不是那么糟糕。 – peacemaker 2012-08-09 16:55:08

如何生成Guid

E.g.

AddedDependents.Add(
    new Dependent 
    { 
     IsSpouse = isSpouse, 
     Id = Guid.NewGuid().ToString("N") 
    }); 

因此意味着你的“ID”是一个字符串,我无法从你的问题看,这是否是可以或不可以。

另外,这样做没有使它成为一个字符串,但希望这是一个Guid类型,如:

AddedDependents.Add(
    new Dependent 
    { 
     IsSpouse = isSpouse, 
     Id = Guid.NewGuid() 
    }); 
+1

我的ID只是一个整数。 Guid如何工作? – proseidon 2012-08-09 16:52:49