我有以下代码:
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上运行。 有什么想法为什么它会那样吗?执行虚假陈述? 谢谢
答案 0 :(得分:6)
您的if语句执行的结果与预期的不同,因为您所期望的解析的语句有所不同。
{em}被解析为object.nullablebool.HasValue ? object.nullablebool.Value : false && ...
的{{1}}。因此,如果object.nullablebool.HasValue ? object.nullablebool.Value : (false && ...)
具有一个值,那就是条件的结果。要解决此问题,您必须添加如下括号:
object.nullablebool
答案 1 :(得分:1)
让我们刷新您的代码(请删除诸如ThreadPoolTaskExecutor
,new
之类的名称;将它们更改为有意义的名称):
string