我有以下
WindowState WindowState_ = WindowState.Normal;
...
public override void Load()
{
...
var Value = StringLoad("WindowState", "");
if (Enum.TryParse(Value, out WindowState_))
;
else
WindowState = System.Windows.WindowState.Normal;
...
}
我可以重写为
var Value = StringLoad("WindowState", "");
if (! Enum.TryParse(Value, out WindowState_))
WindowState = System.Windows.WindowState.Normal;
我找到了!有点难看,往往很难发现,C#HaHa中没有ifNot或ifFail!
有没有"什么都不做"就像上面C#中的分号一样,它不会产生警告,也不会全局关闭此警告。
我愿意接受其他更好的可读编码的建议
谢谢。
答案 0 :(得分:8)
我建议你使用一个局部变量。虽然这不会消除!
运算符的需要,但它并没有被复杂的表达式隐藏:
var Value = StringLoad("WindowState", "");
var isValidWindowState = Enum.TryParse(Value, out WindowState_);
if (!isValidWindowState)
{
WindowState = System.Windows.WindowState.Normal;
}
最重要的是,它概述了Enum.TryParse
在此背景下的用途。 Extract Variable也是众所周知的refactoring。
正如M.kazem Akhgary指出的那样,应用程序的运行时行为不会改变,因为它(很可能)编译为相同的字节码。
答案 1 :(得分:2)
我通常这样做:
var Value = StringLoad("WindowState", "");
if (Enum.TryParse(Value, out WindowState_))
{
//do nothing
}
else
{
WindowState = System.Windows.WindowState.Normal;
}
答案 2 :(得分:2)
您可以使用内联条件语法:
WindowState = (Enum.TryParse(Value, out WindowState_)) ? WindowState
: System.Windows.WindowState.Normal;
答案 3 :(得分:0)
不需要检查,因为解析失败时out变量被设置为默认值:
If the parse operation fails, result contains the default value of the underlying type of TEnum.
var WindowState_ = WindowState.Maximized;
Enum.TryParse("some incorrect value", out WindowState_);
Debug.Print(WindowState_.ToString()); // "Normal"
答案 4 :(得分:0)
当没有其他预料时,我倾向于想写这样的Mattias代码:
var Value = StringLoad("WindowState", "");
var WindowStateIsNotValid = ! Enum.TryParse(Value, out WindowState_);
if (WindowStateIsNotValid)
WindowState = System.Windows.WindowState.Normal;
其他名称如WindowStateFailedToLoad ...会想到......