Member 11000455 Ответов: 1

Как проверить, существует ли значение уже в списке


public  class Logger
{
   string module { get; set; }
   private  string sMessage { get; set; }
   public static string sNewMessage = string.Empty;
   public static List<Logger> logMessages = new List<Logger>();
   private static string sLogMessage;


private static void Log(string message, string type, string module)
{
 //here every message i entered is addedin a list now i want to check if message already exists ???do not add 
bool bMessageexists = logMessages.Contains(new Logger() { sMessage });

но даже если я ввел существующее сообщение оно возвращает false мой код работает неправильно

Что я уже пробовал:

я собрал список строковых Мегагрупп, который в порядке, например, HELLO message, но я хочу проверить, если он уже существует, я имею в виду, если список уже содержит HELLO message, то не добавляйте в список, который я написал код выше, но он не работает правильно, даже если я ввел одно и то же сообщение 10 раз, bool возвращает false??

Ralf Meier

Возможно, вам следует показать код каждого из ваших методов ...

1 Ответов

Рейтинг:
1

Midi_Mick

Если ваш класс регистратора предоставляет свое текущее сообщение, то вам нужно сравнить его:

bool bMessageexists = logMessages.Contains(logger=>logger.Message == sMessage);

Если нет, то вам нужно будет переопределить Logger.Равно, чтобы сравнить сообщения в обоих объектах.
class Logger {
    string sMessage;
    //...
    public override bool Equals(object obj) {
        if (obj is Logger)
            return sMessage == ((Logger)obj).sMessage;
        return false;
    }
}


Afzaal Ahmad Zeeshan

5ед.

Member 11000455

лог-сообщения.Add (new Logger () { sMessage = message }); / / здесь каждый раз, когда я добавляю сообщение, оно добавляется в список соответственно

и я это сделал
bool bMessageexists = logMessages.Содержит (new Logger () { sMessage = message}); //но возвращает false.
попробовал УР код LINQ-выражения не работает

Midi_Mick

Хорошо, теперь, когда вы включили определение класса Logger, ответить на него стало проще.
Поскольку вы объявили sMessage закрытым, вам придется реализовать переопределение Equals в классе Logger (согласно моему ответу выше), так как запрос Linq не имеет доступа к этому полю.
Примечание: Если вы переопределяете Equals, вы также должны переопределить GetHashCode. В этом случае я бы просто вернул sMessage.GetHashCode () из этого переопределения.