2015-05-02 122 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))。但爲什麼默認情況下會發生?我怎樣才能改變這種行爲? –