为什么.NET在错误的IF语句上执行代码?

时间:2018-09-21 07:14:19

标签: c# .net if-statement

我有以下代码:

var dateFrom = DateTime.Parse(string.Format(string.Format("01.04.{0}", dateProperty.Value.AddYears(-1).Year))
if (object.nullablebool.HasValue ? object.nullablebool.Value : false  
&& (string == "V" || string == "N")
&& someDate.HasValue && object.SomeOtherDate.HasValue 
&& someDate.Value.Date > dateFrom.Date)
{
       >> Code
}

我已经测试过从DateTime结构中添加.Date甚至指定确切的年份,但是没有任何效果。

执行代码时,即使

someDate.Value.Date > dateFrom.Date

等于1700> 2018,即使调试器说它是错误的,代码也会像是正确的那样执行。

当我从条件中删除此部分时,请执行以下代码:

someDate.HasValue && object.SomeOtherDate.HasValue

当我将someDate设置为null时,所以someDate.HasValue为false,if语句仍将执行为true。

它解决了什么?如果满足以下两个条件,则将这两个条件带到另一个条件:

var dateFrom = DateTime.Parse(string.Format(string.Format("01.04.{0}", dateProperty.Value.AddYears(-1).Year))
if (object.nullablebool.HasValue ? object.nullablebool.Value : false  
&& (string == "V" || string == "N"))    
{
     if (someDate.HasValue && object.SomeOtherDate.HasValue 
     && someDate.Value.Date > dateFrom.Date)
     {
          >> Code
     }
     else 
     {
          >> Code 
     }           
}

该代码有效,但是太难看了。我正在Visual Studio 2017 Pro上运行。 有什么想法为什么它会那样吗?执行虚假陈述? 谢谢

2 个答案:

答案 0 :(得分:6)

您的if语句执行的结果与预期的不同,因为您所期望的解析的语句有所不同。 {em}被解析为object.nullablebool.HasValue ? object.nullablebool.Value : false && ...的{​​{1}}。因此,如果object.nullablebool.HasValue ? object.nullablebool.Value : (false && ...) 具有一个值,那就是条件的结果。要解决此问题,您必须添加如下括号:

object.nullablebool

答案 1 :(得分:1)

让我们刷新您的代码(请删除诸如ThreadPoolTaskExecutornew之类的名称;将它们更改为有意义的名称):

string