在C#中模拟类似于hashSet的列表,以便List具有noduplicate值

sen*_*ale 2 c# list

我想向List添加colections,但仅限于广告尚不存在.我知道HashSet的工作原理没有重复值,但是使用HashSet我不能使用AddRange和GetRange.

那么有可能像hashSet一样模拟List吗?

List<Advertisements> advertisements = new List<Advertisements>();

advertisements.AddRange(NHibernateSession.CreateCriteria<Advertisements>()
.CreateCriteria(AdvertisementsProperties.City.ToString())
.Add(Restrictions.Or(
Restrictions.Like(CitiesProperties.Name.ToString(), text, MatchMode.Anywhere),
Restrictions.Like(CitiesProperties.SlovenianName.ToString(), text, MatchMode.Anywhere)))
.List<Advertisements>());

advertisements.AddRange(NHibernateSession.CreateCriteria<Advertisements>()
.CreateCriteria(AdvertisementsProperties.Area.ToString())
.Add(Restrictions.Or(
Restrictions.Like(AreasProperties.Name.ToString(), text, MatchMode.Anywhere),
Restrictions.Like(AreasProperties.SlovenianName.ToString(), text, MatchMode.Anywhere)))
.List<Advertisements>());
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 15

一堆物品添加到HashSetAddRange没有简单地使用:

set.UnionWith(items);
Run Code Online (Sandbox Code Playgroud)

a HashSet中的项目未编入索引(它实现为哈希表,不是为基于索引的元素访问而设计的).如果您确实需要按索引存储项目,则必须使用简单列表并创建自己的Add方法,Contains在将每个元素添加到基础列表之前检查每个元素.当然,线性列表不能提供设置操作的效率HashSet.