如何在Visual Studio中重新排序子表达式?

Jus*_*ner 0 c# visual-studio-2008 visual-studio

我想在if语句中重新排序子表达式.这是一个例子:

输入:

if ((a == 1) || (a == 3) || (a == 2))
{
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

if ((a == 1) || (a == 2) || (a == 3))
{
}
Run Code Online (Sandbox Code Playgroud)

有没有可以自动重新排序这些子表达式的工具?

或者以下相同的代码:

输入:

switch (a)
{
    case: 1;
    case: 3:
    case: 2;
    break;
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

switch (a)
{
    case: 1;
    case: 2:
    case: 3;
    break;
}
Run Code Online (Sandbox Code Playgroud)

澄清:

我的问题不是解决短路问题.这是一个有用的讨论,正如Reed所指出的,在大多数情况下重新排序参数是危险的.

如果解析诸如ReSharper或Code Rush之类的工具具有此功能,我只是很好奇.这些工具可能会创建一个AST来执行它们的重构,并且对它们重新排序子表达式也不会太困难.

Ree*_*sey 7

我不知道会自动执行此操作的工具,至少在"if"语句中是这样.

一般来说,如果工具自动执行此操作会很糟糕.以下两个语句的行为不同:

if ((a == 1) && (b == 3) && (c == 2))
Run Code Online (Sandbox Code Playgroud)

if ((a == 1) && (c == 2) && (b == 3))
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,如果b!= 3,但a == 1,它将检查a,然后检查b,然后跳过该块.

在第二种情况下,它会检查a,然后检查c,然后检查b.你失去了检查短路的能力.

当然,在大多数情况下,这并不重要,但是当您使用方法而不是a/b/c的值时,它可能会很昂贵.


编辑:我看到您已更新为使用OR而不是AND.OR存在同样的问题,除了在第一个条件为真时发生短路,而不是在第一个条件为假时发生.