2015-05-02 91 views
0

我想知道为什么在下面的例子中没有通用列表添加重复的元素?如果与我的课程文章相关的我的收藏“类别”已经有一个类别例如。 (类别{id = 1,name =“example1”}),我想添加相同的类别(Category {id = 1,name =“example1”})“。它不会将此元素添加到集合中,因为它是。已经有通用列表中的重复元素

var articleToUpdate = _ctx.Articles.Include("Categories").Where(r => r.Id == id).SingleOrDefault(); 
var categories = _ctx.Categories; 


foreach (var item in categories) 
      { 
       articleToUpdate.Categories.Add(item); 
      } 

这是类定义:

public class Article 
{ 

    public int Id { get; set; } 


    [Required] 
    [StringLength(255)] 
    public string Title { get; set; } 

    [Required] 
    public string Body { get; set; } 

    [Required] 
    public DateTime DateCreated { get; set; } 

    [Required] 
    [StringLength(255)] 
    public string Author { get; set; } 


    public ICollection<ArticleComment> Comments { get; set; } 
    public ICollection<Category> Categories { get; set; } 

} 
+1

你是什么意思_“添加重复的元素”_?什么是输出你在期待什么,实际的结果是什么? –

+0

我的意思是如果与我的课程文章相关的我的集合“类别”已经有一个类别例如。 (类别{id = 1,name =“example1”}),我想添加相同的类别(类别{id = 1,name =“example1”})“。它不会将此元素添加到集合中,因为它是 –

+0

对不起斯蒂芬但约翰尼可以理解我的问题,我有一个非常有趣的答案,所以我不明白为什么它被认为不清楚? –

回答

0

我猜你ICollection<Category>实际实例为HashSet尝试的IList<Category>代替,或者看看是否可以定义属性作为包

+0

但为什么ICollection 将被实例化为HashSet?我没有明确地做过,它可以默认发生吗? –

+0

那么你可以调试你的代码并看到它。将断点放在添加类别的行上,将鼠标悬停在变量上,即可看到实际类型。这可能是默认情况下发生的,是的。 – Johnny

+0

是的。你是对的,在原始视图中我得到了:((System.Collections.Generic.HashSet )(articleToUpdate.Categories))。但为什么默认情况下会发生?我怎样才能改变这种行为? –