C# 这个逻辑能被改写成更整洁的东西吗?
我可以用一种更简单、更容易阅读的方式来写下面的逻辑吗?下面是我需要的,但它非常混乱:C# 这个逻辑能被改写成更整洁的东西吗?,c#,.net,boolean-logic,C#,.net,Boolean Logic,我可以用一种更简单、更容易阅读的方式来写下面的逻辑吗?下面是我需要的,但它非常混乱: if (IsChanged == true) { return; } // Executed when the close (x) button is pressed, // as the Status string is not yet set to a real value... else if (Status == "" && IsChanged == fal
if (IsChanged == true)
{
return;
}
// Executed when the close (x) button is pressed,
// as the Status string is not yet set to a real value...
else if (Status == "" && IsChanged == false)
{
CancelClose();
}
// saving logic falls to here...
else if (IsChanged == false && Status == "saving")
{
IsChanged = false;
}
谢谢这有点干净:
if (IsChanged)
{
}
else if (Status == "saving")
{
}
else if (Status == "")
{
}
else
{
}
我建议您使用enum
来表示状态。这将允许您的代码是强类型的
public enum Status
{
Closing,
Saving,
Changed,
}
然后,您可以使用一个漂亮的开关语句来决定要采取的操作
switch (_status)
{
case Status.Saving:
break;
case Status.Closing:
break;
case Status.Changed:
break;
default:
break;
}
这是最整洁的了。请注意,如果isChanged为true,则返回值,因此可以进一步假定isChanged为false。是:
if (IsChanged) return;
if (String.IsNullOrEmpty(Status)) CancelClose();
它可以简化为
if (IsChanged)
{
return;
}
else if (Status == "") // Executed when the close (x) button is pressed, as the Status string is not yet set to a real value...
{
CancelClose();
}
else if (Status == "saving") // saving logic falls to here...
{
// IsChanged = false;
}
在第一次检查中不需要==True,因为它已经是True或false了。您不需要在其他选项中检查false,因为如果它不为true,则必须为false。由于您返回if IsChanged==true,因此在其他ifs中不需要它
if (IsChanged == true)
return;
switch (Status)
{
case "":
CancelClose();
break;
case "saving":
break;
}
我会避免以大写字母开头变量名。
- 将第一个else if剪切为just if。如果IsChanged为true,则永远不会到达“else”
- 从其他ifs中删除IsChanged==false,因为它们总是true
- 对于您的状态,请考虑枚举而不是字符串
我建议:
if (IsChanged)
{
return;
}
if (CurrentStatus == Status.None)
{
CancelClose();
return;
}
if (CurrentStatus == Status.Saving)
{
// IsChanged = false;
}
我对c不熟悉,但是
由于我不熟悉c#,我不会尝试重新编写您的代码,但在任何情况下,三元运算符都可以在某些地方带来令人满意的简洁性。对于少量字符串,我倾向于避免使用switch
语句。我认为在这种情况下switch语句的优点在于。您可以很容易地看到流程将如何依赖于状态(没有其他变量),并且可以很容易地想象根据状态的新值添加更多案例。这是不完整的。您缺少了实际保存逻辑的一个点——如果调用CancelClose,您不希望落入该逻辑。我上面的内容与提供的示例相同,因为最后一个块中没有发生任何事情。(除非status属性除了返回字符串值之外还有一些副作用,这将是非常糟糕的…)绝对正确。如果isChanged
为false,则当它返回为true时,不会检查Status==“”在其他情况下,如果有更多的Status选项可用,则此操作将失败考虑更多问题并将答案编辑为与原始实现一致。不检查Status=“”在其他情况下,我认为这是最有效的解决方案,修复双方。“if(isChanged==true)”可以重写为“if(isChanged)”。可以保存==true
partI没有想到!我刚刚复制了他的ischanged==true:(你可以从大的else块中删除所有内容。也许ischanged
和'Status'是一个属性?这些是属性名,属性名通常以大写字母开头。另一种方法是类似private的ischanged。==(true | false)
是魔鬼的。魔鬼的,我说!是的,使用!IsChanged
超过IsChanged==False
使用string.Empty not“”,以避免不必要的对象创建在测试的地方,IsChanged永远不能为False,因此这是不必要的测试!
if (IsChanged == true)
return;
switch (Status)
{
case "":
CancelClose();
break;
case "saving":
break;
}
if (IsChanged) return;
if (Status == "saving")
{
//IsChanged = false;
}
else if (Status = "")
{
CancelClose();
}
if (IsChanged)
{
return;
}
if (CurrentStatus == Status.None)
{
CancelClose();
return;
}
if (CurrentStatus == Status.Saving)
{
// IsChanged = false;
}
if(!IsChanged) {
if (Status == "saving") // saving logic falls to here...
{
// IsChanged = false;
}
else if (Status == "") // Executed when the close (x) button is pressed, as the Status string is not yet set to a real value...
{
CancelClose();
}
} else {
return;
}
if (IsChanged)
return;
if (String.IsNullOrEmpty(Status)) // better use this unless you would like a
CancelClose(); // nullPointerException
else if (Status.equals("Saving"))
// whatever you want for save
condition ? first_expression : second_expression;