2015-10-26 3 views
0

Предложите классуПроверить наличие в списке <T>

public class StopSignal 
    { 
     public DateTime time { get; set; } 
     public string symbol { get; set; } 
     public int timeout { get; set; } 
    } 

СОЗДАТЬ:

public static List<StopSignal> SignalTimeOut; 
SignalTimeOut = new List<StopSignal>(); 

Добавить информацию: DateTime.Now, например = 25.10.2015 04:30:00

SignalTimeOut.Add(new StopSignal(){time = DateTime.Now, symbol="AAPL", timeout=60}); 

Как проверить доступность символа в списке SignalTimeOut?

Сделать запрос в список, где мы имеем пункт: 25.10.2015 4:30:00, AAPL, 60

Например DateTime.Now = 25.10.2015 05:25:00

  1. Если разница между 25.10.2015 4:30:00 и 25.10.2015 5:25:00 < 60 минут то есть некоторое действие
  2. Если разница будет твин 25.10.2015 04:30:00 и 25.10.2015 05:25:00> минут, затем снимаем этот пункт
  3. Если деталь нет в списке, то другое действие
+1

На что вам действительно нужна помощь _specific_? Вы можете использовать таймер для выполнения действий периодически. Вы можете использовать методы в LINQ или 'List ' сам класс, чтобы изучить содержимое списка и управлять этим содержимым. Какая часть этого это _exactly_, с которой вы столкнулись? Прочтите https://stackoverflow.com/help/how-to-ask, чтобы узнать, как представить свой вопрос ясным, ответным путем. –

+0

Я предполагаю, что здесь есть проблема синхронизации, так как это похоже на торговую систему, которая будет добавлять и проверять новые акции. Возможно стоит посмотреть на использование SynchronizedCollection. https://msdn.microsoft.com/en-us/library/ms668265(v=vs.110).aspx – Doug

+0

@PeterDuniho Мой вопрос посередине 'Как проверить доступность символа в List SignalTimeOut?' – alexander

ответ

2

Самый простой способ справиться с этим - найти соответствующий элемент в списке и обработать его несколькими операторами if. Обратите внимание, что этот код предполагает, что может быть не более одного совпадения. Если это не так, или если вам нужно проверить наличие ошибок, замените .SingleOrDefault(), например. .ToList() и проверить количество элементов в этом списке

var match = SignalTimeOut.Where(s => s.symbol == desiredSymbol).SingleOrDefault(); 

if (match == null) 
{ 
    Action3(); 
} 
else 
{ 
    var age = new TimeSpan(DateTime.Now.Ticks - match.time.Ticks); 
    if (age.TotalMinutes() > 60) 
     Action2(); 
    else 
     Action1(); 
} 
Смежные вопросы