C # лямбда-выражение не может управлять определенной строкой сравнения - PullRequest
0 голосов
/ 17 мая 2011

У меня есть определенная лямбда, которая, кажется, не хочет работать должным образом, хотя логика кажется здравой.и это нарушает мою функцию поиска.Кто-нибудь может пролить свет на это?

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Почему бы не бросить сравнение строк и явно проверить?

index = llCodeList.FindIndex(
            f => f.Threshold.ToString()
                            .Contains(searchText));

Вы уверены, что текст поиска является подмножеством порогового числа?

Также может случиться так, что вы не понимаете, как работает string.Compare, он будет проверять не числовое значение, а строковое значение. Для вышеупомянутого, если searchText равно 4 и порог -40 будет соответствовать вашему предикату. Мой пример более явно демонстрирует поведение string.Compare(...,...,...) >= 0

Если вы пытаетесь найти результаты, основываясь на том, что они больше или равны совпадению для порога и searchText, вы можете сделать это

int search = 0;
int32.TryParse(searchText, out search);
index = llCodeList.FindIndex(f => f.Threshold >= search);
0 голосов
/ 17 мая 2011

Я думаю, что вы хотели проверить IndexOf вместо использования Compare.

index = llCodeList.FindIndex(
    f => f.Threshold.ToString().IndexOf(
        searchText, StringComparison.InvariantCultureIgnoreCase) >= 0);

Но имя FindIndex звучит так, как будто вы хотите вернуть фактический индекс. Мой хрустальный шар говорит, что вы ищете что-то вроде

index = llCodeList.FindIndex(
    f => f.Threshold.ToString().IndexOf(
        searchText, StringComparison.InvariantCultureIgnoreCase));
0 голосов
/ 17 мая 2011

Если мой комментарий правильно понял суть того, что вы пытаетесь сделать, сделайте что-то вроде этого:

int index = -1;
int intVal;
if (int.TryParse(seachText, intVal)){
  index = llCodeList.FindIndex(f => f.Threshold >= intVal);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...