可能错误的空陈述 - 在C#中什么都不做

时间:2017-01-02 19:59:52

标签: c#

我有以下

    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#中的分号一样,它不会产生警告,也不会全局关闭此警告。

我愿意接受其他更好的可读编码的建议

谢谢。

5 个答案:

答案 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 ...会想到......