Логическое значение в списке дает ошибочные c результаты - PullRequest
0 голосов
/ 09 марта 2020

У меня есть эта строка кода:

bool existsbuy = pricelist.Exists(element => (element <= TPbuyRange) && (element >= Convert.ToDouble(JsonResP.prices[0].closeoutBid)));

, которая не работает, как ожидалось, она дает мне всегда false. И я изменил это, который работает просто отлично, он дает мне булевы результаты как следует:

bool existsbuy1 = pricelist.Exists(element => (element <= TPbuyRange) );
bool existsbuy2 = pricelist.Exists(element => (element >= Convert.ToDouble(JsonResP.prices[0].closeoutBid)));

Тогда у меня есть этот, который очень похож на первую строку, и который тоже отлично работает :

bool existssell = pricelist.Exists(element => element >= TPsellRange & element <= Convert.ToDouble(JsonResP.prices[0].closeoutBid));

Так что я не понимаю, что здесь не так? Спасибо.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Примите во внимание следующее:

list = 10,20,30

list.Exists(e => e < 20 && e > 20); //false, no element is less than 20 and also greater than 20

В сравнении с

list.Exists(e => e < 20); //true, element 10 is less than 20
list.Exists(e => e > 20); //true, element 30 is greater than 20

Ваш другой способ работы может быть таким:

list.Exists(e => e < 30 && e > 10); //true, element 20 is less than 30 and also greater than 10

Не зная, какие у нас ценности, мы не могу сказать точно, но это будет причиной


Я также хотел бы отметить, что поскольку ваш Convert.ToDouble (...) фактически является константой, вы должны делать это вне лямбда-выражения LINQ

0 голосов
/ 09 марта 2020

Если оба условия возвращают true, это говорит о том, что в списке содержится хотя бы один элемент, который удовлетворяет условию элемента <= TPbuyRange, и хотя бы один элемент, удовлетворяющий условию элемента> = Convert.ToDouble (JsonResP.prices [0 ] .closeoutBid)). Однако если условие соединения не возвращает того же значения, что и alivebuy1 && existbuy2, это означает, что ни один элемент в списке не удовлетворяет обоим условиям одновременно.

...