C# 复杂的if语句永远不会执行

C# 复杂的if语句永远不会执行,c#,C#,我有一个很长的if语句,用于检查多个内容。不过,它似乎从未执行过花括号中的代码 它正在检查两个对象 “currentEngineObject”是数据库中存在的对象 “engineList”是传递到此方法的对象 因此,我试图检查以确保SizeId不是空的,并且两个对象都有一个值 如果它们都有值,但不是相同的值,我想将engineList的“SizeId”设置为“currentEngineObject”中的“SizeId”值 但即使有测试数据,它也永远无法通过我的大型if语句 所以我想知道我的逻辑是

我有一个很长的if语句,用于检查多个内容。不过,它似乎从未执行过花括号中的代码

它正在检查两个对象

“currentEngineObject”是数据库中存在的对象

“engineList”是传递到此方法的对象

因此,我试图检查以确保SizeId不是空的,并且两个对象都有一个值

如果它们都有值,但不是相同的值,我想将engineList的“SizeId”设置为“currentEngineObject”中的“SizeId”值

但即使有测试数据,它也永远无法通过我的大型
if
语句

所以我想知道我的逻辑是否有问题?比如我应该用“或”而不是“和”

这是我的
if
块:

if ((currentEngineObject.SizeId.HasValue && currentEngineObject.SizeId.Value != Guid.Empty) 
    && (engineList.SizeId.HasValue && engineList.SizeId.Value != Guid.Empty)
    && (currentEngineObject.SizeId.Value != engineList.SizeId.Value))
{
    engineList.SizeId = currentEngineObject.SizeId.Value;
}
谢谢

试试这个:


if ((currentEngineObject.SizeId.HasValue && currentEngineObject.SizeId.Value != Guid.Empty) 
    && (engineList.SizeId.HasValue && engineList.SizeId.Value != Guid.Empty)
    && !currentEngineObject.SizeId.Equals( engineList.SizeId)) ////Use equals
{
    engineList.SizeId =  currentEngineObject.SizeId;
}

您可以使用
GetValueOrDefault
方法代替
HasValue
/
Value
。并通过debugger@Pavel甚至是
?。
/
运算符我个人会使用
如果(currentEngineObject.SizeId.GetValueOrDefault()!=默认值)
您的条件似乎是正确的(但可以简化为@PavelAnikhouski和@CaiusJard),您可以设置断点并检查数据吗?顺便说一句,只有
&&
你不需要括号<代码>a&&b&&c&&d==(a&&b)&&&c&&d)即使有测试数据也意味着什么?我想知道是否有问题,是否有单元测试?GUID是一个结构,而不是一个类