我遇到过一些我以前从未见过的奇怪的东西,并想知道是否有人可以解释这个问题:
旧代码:
if ((orderFileCreationStatus.OrderFileStatus == OrderFileCreationStatus.Status.ContentCreated
|| orderFileCreationStatus.OrderFileStatus == OrderFileCreationStatus.Status.NoContent)
&& orderFileCreationStatus.SpecialMeasureFileStatus != OrderFileCreationStatus.Status.Published
&& orderFileCreationStatus.PersonalisedProductFileStatus != OrderFileCreationStatus.Status.Published)
{
webOrderHeader.OrderStatus = Domain.Duos.OrderStatus.AwaitingAuthorisation;
webOrderHeader.AuthoriserUserId = null;
UpdateWebOrderHeader(webOrderHeader);
throw new Exception("Could not create the Order File for order ID: " + webOrderHeader.OrderId.ToString() + "rollback");
}
新代码:
if ((orderFileCreationStatus.OrderFileStatus == OrderFileCreationStatus.Status.ContentCreated || orderFileCreationStatus.OrderFileStatus == OrderFileCreationStatus.Status.NoContent))
{
if(orderFileCreationStatus.SpecialMeasureFileStatus != OrderFileCreationStatus.Status.Published)
{
if(orderFileCreationStatus.PersonalisedProductFileStatus != OrderFileCreationStatus.Status.Published)
{
webOrderHeader.OrderStatus = Domain.Duos.OrderStatus.AwaitingAuthorisation;
webOrderHeader.AuthoriserUserId = null;
UpdateWebOrderHeader(webOrderHeader);
throw new Exception("Could not create the Order File for order ID: " + webOrderHeader.OrderId.ToString() + "rollback");
}
}
}
就resharper而言,这两个if语句是相同的,但这里是捕获。
在旧代码中,调试器正在跳过嵌套在IF中的前三行并抛出异常。
在新代码中,这非常有效。有没有人经历过这个,更重要的是是什么导致了它。我很想知道。
答案 0 :(得分:2)
这种逻辑永远不会成真:
if(orderFileCreationStatus.SpecialMeasureFileStatus != orderFileCreationStatus.SpecialMeasureFileStatus)
您正在将值类型与自身进行比较,这将始终为真,然后始终将该值假定为false。
答案 1 :(得分:0)
陈述完全相同。问题必须在于正在运行的代码版本。尝试将If块拆分为新的Console应用程序,看看是否可以再次重现差异:
static void Main(string[] args)
{
bool A = true;
bool B = false;
bool C = true;
bool D = true;
bool result1 = (A || B) && C && D;
Console.WriteLine("Old way: " + result1);
bool result2 = false;
if (A || B)
{
if (C)
{
if (D)
{
result2 = true;
}
}
}
Console.WriteLine("New way: " + result2);
Console.ReadKey();
}