简体   繁体   English

简化代码C#开关语句

[英]Simplify Code C# switch statement

I have written bunch of switch case statement, but I know this can be simplified, any guidance will be respected. 我已经写了很多switch案例声明,但是我知道可以简化,任何指导都会得到尊重。 I am fairly new to XAML. 我对XAML相当陌生。

switch (e.Key)
{
    case Key.Escape:
        this.DialogResult = false;
        break;
    case Key.Return:
        this.DialogResult = true;
        break;
    case Key.Back:
        if (ResultValue != null && ResultValue.Length > 0)
            ResultValue = ResultValue.Remove(ResultValue.Length - 1);
        if (isUserAccess)
        {
            if (UserAccessPasswordValue != null && UserAccessPasswordValue.Length > 0)
                UserAccessPasswordValue = UserAccessPasswordValue.Remove(UserAccessPasswordValue.Length - 1);
        }
        break;
    case Key.Space:
        if (!CheckOutputLength(ResultValue)) return;
            ResultValue += " ";
        break;
    case Key.NumPad0:
    case Key.D0:             
    case Key.NumPad1:
    case Key.D1:
    case Key.NumPad2:
    case Key.D2:
    case Key.NumPad3:
    case Key.D3:
    case Key.NumPad4:
    case Key.D4:
    case Key.NumPad5:
    case Key.D5:
    case Key.NumPad6:
    case Key.D6:
    case Key.NumPad7:
    case Key.D7:
    case Key.NumPad8:
    case Key.D8:
    case Key.NumPad9:
    case Key.D9:
    case Key.A:
    case Key.B:
    case Key.C:
    case Key.D:
    case Key.E:
    case Key.F:
    case Key.G:
    case Key.H:
    case Key.I:
    case Key.J:
    case Key.K:
    case Key.L:
    case Key.M:
    case Key.N:
    case Key.O:
    case Key.P:
    case Key.Q:
    case Key.R:
    case Key.S:
    case Key.T:
    case Key.U:
    case Key.V:
    case Key.W:
    case Key.X:
    case Key.Y:
    case Key.Z:
        CheckandAddValue(e.Key.ToString());
        break;
}

My attempt has too many errors. 我的尝试有太多错误。 This is a custom key board and detects the user inputs. 这是一个自定义键盘,可以检测用户输入。 The above code works and I am able to get the required outcome but i know this can be made simpler. 上面的代码有效,我能够获得所需的结果,但是我知道可以将其简化。

My simplified attempt 我的简化尝试

if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))

Handle case which you want else default case.. 处理要使用的大小写,否则为默认大小写。

        switch (e.Key)
        {
            case Key.Escape:
                this.DialogResult = false;
                break;
            case Key.Return:
                this.DialogResult = true;
                break;
            case Key.Back:
                if (ResultValue != null && ResultValue.Length > 0)
                    ResultValue = ResultValue.Remove(ResultValue.Length - 1);
                if (isUserAccess)
                {
                    if (UserAccessPasswordValue != null && UserAccessPasswordValue.Length > 0)
                        UserAccessPasswordValue = UserAccessPasswordValue.Remove(UserAccessPasswordValue.Length - 1);
                }
                break;
            case Key.Space:
                if (!CheckOutputLength(ResultValue)) return;
                ResultValue += " ";
                break;
            case default :
                CheckandAddValue(e.Key.ToString());
                break;
        }

You can use C#7 pattern-matching in Visual Studion 2017 and 2015 : 您可以在Visual Studion 2017和2015中使用C#7模式匹配:

switch (e.Key)
{
    case Key.Escape:
        this.DialogResult = false;
        break;
    case Key.Return:
        this.DialogResult = true;
        break;
    case Key.Back:
        if (!string.IsNullOrEmpty(ResultValue))
            ResultValue = ResultValue.Remove(ResultValue.Length - 1);

        if (isUserAccess)
        {
            if (!string.IsNullOrEmpty(UserAccessPasswordValue))
                UserAccessPasswordValue = UserAccessPasswordValue.Remove(UserAccessPasswordValue.Length - 1);
        }
        break;
    case Key.Space:
        if (!CheckOutputLength(ResultValue)) return;
        ResultValue += " ";
        break;
    case var k when k >= Key.D0 && k <= Key.NumPad9
               && !(k >= Key.LWin && k <= Key.Sleep):
        CheckandAddValue(e.Key.ToString());
        break;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM