Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表上的布尔值给出了不稳定的结果_C#_List_Boolean_Compare - Fatal编程技术网

C# 列表上的布尔值给出了不稳定的结果

C# 列表上的布尔值给出了不稳定的结果,c#,list,boolean,compare,C#,List,Boolean,Compare,我有一行代码: bool existsbuy = pricelist.Exists(element => (element <= TPbuyRange) && (element >= Convert.ToDouble(JsonResP.prices[0].closeoutBid))); bool existsbuy=pricelist.Exists(element=>(element=Convert.ToDouble(JsonResP.prices[0].cl

我有一行代码:

bool existsbuy = pricelist.Exists(element => (element <= TPbuyRange) && (element >= Convert.ToDouble(JsonResP.prices[0].closeoutBid)));
bool existsbuy=pricelist.Exists(element=>(element=Convert.ToDouble(JsonResP.prices[0].closeoutBid));
这不是预期的效果,它给我的总是假的。 我对此进行了修改,效果很好,它给出了布尔结果,正如它应该的那样:

bool existsbuy1 = pricelist.Exists(element => (element <= TPbuyRange) );
bool existsbuy2 = pricelist.Exists(element => (element >= Convert.ToDouble(JsonResP.prices[0].closeoutBid)));
bool existsbuy1=pricelist.Exists(element=>(element(element>=Convert.ToDouble(JsonResP.prices[0].closeoutBid));
然后我有一个,非常类似于第一行,也很好:

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

list = 10,20,30

list.Exists(e => e < 20 && e > 20); //false, no element is less than 20 and also greater than 20
list=10,20,30
Exists(e=>e<20&&e>20);//false,没有元素小于20也不大于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<20);//true,元素10小于20
存在(e=>e>20);//为true,元素30大于20
你的另一个可行的方法可能是:

list.Exists(e => e < 30 && e > 10); //true, element 20 is less than 30 and also greater than 10
list.Exists(e=>e<30&&e>10);//为true,元素20小于30,也大于10
在不知道你的价值观是什么的情况下,我们无法准确地说出来,但这将是原因



我还想指出,因为Convert.ToDouble(…)实际上是一个常量,所以您应该在LINQ lambda之外执行它,如果单独的条件都返回true,这表明列表至少包含一个满足条件元素=Convert.ToDouble(JsonResP.prices[0].closeoutBid))的项但是,如果联合条件没有返回与existsbuy1和existsbuy2相同的值,则表明列表中没有任何项同时满足这两个条件。

您需要在此处包含更多信息。例如,什么是
价格列表
?如果它是
列表
,其中
某些东西
不是内置的.NET类型,请提供
something
的定义。此外,
existsbuy1和&existsbuy2
在逻辑上并不等同于
existsbuy
existsbuy
要求单个元素匹配这两个条件,而
existsbuy1
existsbuy2
即使元素不同,也可以同时为真满足他们各自的条件。第一个和第二个不一样——第一个元素必须小于tpbuyrange,同时也必须大于收尾出价。第二个元素中至少有一个元素必须小于收尾出价,另一个可能不同的元素必须大于第三个元素中的收尾出价d one existsel1-这是故意的,还是你复制了带有键入错误的(&a)?正如你所看到的,这行包含“=”因此在你的示例中应该包含20。你错过了我想说的重要内容。我要强调的是相互排斥的布尔条件。如果需要,可以将其作为
e=21
阅读;这不是关于“大于”与“大于或等于”相比,这意味着两个特定的事物不可能同时为真,比如
answer==“yes”&&answer==“no”
我看到了关于existsbuy1和existsbuy2这两个独立行的逻辑错误。但我仍然不明白为什么第一行不起作用,以及如何处理……我在列表中有一些值。我正在尝试找出它们中是否有任何一个在“TPbuyRange”和“Convert.ToDouble(JsonResP.prices[0]这两个值的范围内.closeoutBid)”,这两个值永远不会相同。因此我认为应该可以工作……这不是说它们是相同的值。我可以选择一个使用不同值的示例,例如
list.Exists(e=>e<11&&e>29)
-这些值并不相同,但列表中仍然没有同时小于11和大于29的值。宇宙中没有任何数字满足这一要求。让我们试着找到一个,从1开始:
1小于11?TRUE.1小于29?FALSE.TRUE&&FALSE==FALSE
。尝试2:
2小于11?TRUE.2小于11比29?假。真&&FALSE==FALSE
。你自己继续努力,试图找到一个真的;下周你仍然会尝试!