我有一個門票列表。每張票屬於一個事件。我想創建來自票據的所有事件的列表。我可以得到這個列表,但是列表中重複了相同的事件(值)。我如何確保一次活動只添加一次列表?不要添加到列表中相同的值
List<int> tickets = new List<int>();
List<Event> events = new List<Event>();
foreach (var s in tickets)
{
events.Add(_context.Event.Find(s));
}
我有一個門票列表。每張票屬於一個事件。我想創建來自票據的所有事件的列表。我可以得到這個列表,但是列表中重複了相同的事件(值)。我如何確保一次活動只添加一次列表?不要添加到列表中相同的值
List<int> tickets = new List<int>();
List<Event> events = new List<Event>();
foreach (var s in tickets)
{
events.Add(_context.Event.Find(s));
}
您是否嘗試過使用List<T>.Contains()
方法?
foreach (var s in tickets)
{
var event = _context.Event.Find(s);
if (!events.Contains(event))
{
events.Add(event);
}
}
如果事件的順序不重要,則可以使用HashSet<Event>
而不是List。這樣,如果事件已經存在於哈希集中,則不會再添加該事件。還要確保Event覆蓋了Equals和GetHashCode方法,它們比較了事件的實際屬性。
一個完整的解決方案的Linq與Distinct()
:
var events = tickets.Select(ticket => _context.Event.Find(ticket)).Distinct();
有一點要注意的是,'HashSet的'只在.NET 3.5及以上可用。您可能需要在答案中添加該免責聲明。 –
2013-04-22 16:20:36
@JonSenchyna找到一個不使用.NET 3.5的人是不常見的(在這裏)。如果是這樣的話,他們通常會在問題本身中陳述。最重要的是,即使在.Net 1.0中也有非泛型的'HashTable'。 – Servy 2013-04-22 16:21:57
+1。 'Dictionary'或'SortedDictionary'是2.0選項...解釋爲什麼使用這個結構而不是列表應該由OP完成作爲家庭作業的一部分。 – 2013-04-22 16:23:28