2013-04-22 60 views
0

我有一個門票列表。每張票屬於一個事件。我想創建來自票據的所有事件的列表。我可以得到這個列表,但是列表中重複了相同的事件(值)。我如何確保一次活動只添加一次列表?不要添加到列表中相同的值

List<int> tickets = new List<int>(); 

List<Event> events = new List<Event>(); 

foreach (var s in tickets) 
{ 
    events.Add(_context.Event.Find(s)); 
} 

回答

2

您是否嘗試過使用List<T>.Contains()方法?

foreach (var s in tickets) 
{ 
    var event = _context.Event.Find(s); 
    if (!events.Contains(event)) 
    { 
     events.Add(event); 
    } 
} 
8

如果事件的順序不重要,則可以使用HashSet<Event>而不是List。這樣,如果事件已經存在於哈希集中,則不會再添加該事件。還要確保Event覆蓋了Equals和GetHashCode方法,它們比較了事件的實際屬性。

+0

有一點要注意的是,'HashSet的'只在.NET 3.5及以上可用。您可能需要在答案中添加該免責聲明。 – 2013-04-22 16:20:36

+0

@JonSenchyna找到一個不使用.NET 3.5的人是不常見的(在這裏)。如果是這樣的話,他們通常會在問題本身中陳述。最重要的是,即使在.Net 1.0中也有非泛型的'HashTable'。 – Servy 2013-04-22 16:21:57

+0

+1。 'Dictionary'或'SortedDictionary'是2.0選項...解釋爲什麼使用這個結構而不是列表應該由OP完成作爲家庭作業的一部分。 – 2013-04-22 16:23:28

2

一個完整的解決方案的Linq與Distinct()

var events = tickets.Select(ticket => _context.Event.Find(ticket)).Distinct(); 
相關問題