Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不改变c#中的功能的情况下尽可能减少代码中的分支?_C#_Branch - Fatal编程技术网

如何在不改变c#中的功能的情况下尽可能减少代码中的分支?

如何在不改变c#中的功能的情况下尽可能减少代码中的分支?,c#,branch,C#,Branch,有一些可能缩短您的代码: 您可以使用do{}while(条件)循环。这样,您就可以决定在输入之后是否离开循环 您不需要一个变量来决定是否停止循环。您可以在循环条件中检查所有条件(在您的情况下非常容易) 您可以使用正则表达式检查字符串的长度,使用^=字符串的开头和$=字符串的结尾锚定和{5}作为匹配长度 您还可以简化正则表达式以忽略该情况 您的除法操作似乎只是检查输入的第一个数字是否与0不同。您还可以使用正则表达式检查这一点 您可以使用staticRegex.IsMatch()方法,该方法返回tr

有一些可能缩短您的代码:

  • 您可以使用
    do{}while(条件)循环。这样,您就可以决定在输入之后是否离开循环

  • 您不需要一个变量来决定是否停止循环。您可以在循环条件中检查所有条件(在您的情况下非常容易)

  • 您可以使用正则表达式检查字符串的长度,使用
    ^
    =字符串的开头和
    $
    =字符串的结尾锚定和
    {5}
    作为匹配长度

  • 您还可以简化正则表达式以忽略该情况

  • 您的除法操作似乎只是检查输入的第一个数字是否与
    0
    不同。您还可以使用正则表达式检查这一点

  • 您可以使用static
    Regex.IsMatch()
    方法,该方法返回
    true
    false

  • 例如检查状态

    public static void addpatron()
        {
            Console.WriteLine("You have selected to add a Patron.");
            string first, last, city, state = "", street, email, temp;
            int zip = 0;
            long number = 0;
            Console.WriteLine("Please Provide a First Name: ");
            first = Console.ReadLine();
            Console.WriteLine("Please Provide a Last Name: ");
            last = Console.ReadLine();
            Console.WriteLine("Please Provide a Street Address: ");
            street = Console.ReadLine();
            Console.WriteLine("Please Provide a City Name: ");
            city = Console.ReadLine();
            Console.WriteLine("Please Provide a Email Id: ");
            email = Console.ReadLine();
            int f = 0;
            while (f == 0)
            {
                Console.WriteLine("Please Provide a State Name: ");
                state = Console.ReadLine();
                if (state.Length == 2)
                {
                    Regex r = new Regex(@"([A-Za-z][A-Za-z])");
                    Match m = r.Match(state);
                    if (m.Success)
                        f = 1;
                }
            }
            while (f == 1)
            {
                Console.WriteLine("Please Provide a Zip Code: ");
                temp = Console.ReadLine();
                if (temp.Length == 5)
                {
                    Regex r = new Regex(@"([0-9]{5})");
                    Match m = r.Match(temp);
                    if (m.Success)
                    {
                        zip = int.Parse(temp);
                        if (zip / 10000 != 0)
                            f = 0;
                    }
                }
            }
            while (f == 0)
            {
                Console.WriteLine("Please Provide a Mobile Number: ");
                temp = Console.ReadLine();
                if (temp.Length == 10)
                {
                    Regex r = new Regex(@"([0-9]{10})");
                    Match m = r.Match(temp);
                    if (m.Success)
                    {
                        number = long.Parse(temp);
                        if (number / 100000000 != 0)
                            f = 1;
                    }
                }
            }
    
            MainClass.patron.Add(MainClass.user, new Info { firstname = first, lastname = last, street = street, state = state, city = city, zip = zip, phone = number, email = email });
            displayUser.display(MainClass.user);
            MainClass.user++;
            MainClass.Menu();
        }
    
    检查邮政编码
    int.TryParse()
    仅在
    Regex.Match()
    返回
    true
    并且是解析和分配表达式中的值的方便方法时才会执行

    do {
       Console.WriteLine("Please Provide a State Name: ");
       state = Console.ReadLine();
    } while (!RegEx.IsMatch(state, @"^[a-z]{2}$", RegexOptions.IgnoreCase)) 
    

    有一些可能缩短您的代码:

  • 您可以使用
    do{}while(条件)循环。这样,您就可以决定在输入之后是否离开循环

  • 您不需要一个变量来决定是否停止循环。您可以在循环条件中检查所有条件(在您的情况下非常容易)

  • 您可以使用正则表达式检查字符串的长度,使用
    ^
    =字符串的开头和
    $
    =字符串的结尾锚定和
    {5}
    作为匹配长度

  • 您还可以简化正则表达式以忽略该情况

  • 您的除法操作似乎只是检查输入的第一个数字是否与
    0
    不同。您还可以使用正则表达式检查这一点

  • 您可以使用static
    Regex.IsMatch()
    方法,该方法返回
    true
    false

  • 例如检查状态

    public static void addpatron()
        {
            Console.WriteLine("You have selected to add a Patron.");
            string first, last, city, state = "", street, email, temp;
            int zip = 0;
            long number = 0;
            Console.WriteLine("Please Provide a First Name: ");
            first = Console.ReadLine();
            Console.WriteLine("Please Provide a Last Name: ");
            last = Console.ReadLine();
            Console.WriteLine("Please Provide a Street Address: ");
            street = Console.ReadLine();
            Console.WriteLine("Please Provide a City Name: ");
            city = Console.ReadLine();
            Console.WriteLine("Please Provide a Email Id: ");
            email = Console.ReadLine();
            int f = 0;
            while (f == 0)
            {
                Console.WriteLine("Please Provide a State Name: ");
                state = Console.ReadLine();
                if (state.Length == 2)
                {
                    Regex r = new Regex(@"([A-Za-z][A-Za-z])");
                    Match m = r.Match(state);
                    if (m.Success)
                        f = 1;
                }
            }
            while (f == 1)
            {
                Console.WriteLine("Please Provide a Zip Code: ");
                temp = Console.ReadLine();
                if (temp.Length == 5)
                {
                    Regex r = new Regex(@"([0-9]{5})");
                    Match m = r.Match(temp);
                    if (m.Success)
                    {
                        zip = int.Parse(temp);
                        if (zip / 10000 != 0)
                            f = 0;
                    }
                }
            }
            while (f == 0)
            {
                Console.WriteLine("Please Provide a Mobile Number: ");
                temp = Console.ReadLine();
                if (temp.Length == 10)
                {
                    Regex r = new Regex(@"([0-9]{10})");
                    Match m = r.Match(temp);
                    if (m.Success)
                    {
                        number = long.Parse(temp);
                        if (number / 100000000 != 0)
                            f = 1;
                    }
                }
            }
    
            MainClass.patron.Add(MainClass.user, new Info { firstname = first, lastname = last, street = street, state = state, city = city, zip = zip, phone = number, email = email });
            displayUser.display(MainClass.user);
            MainClass.user++;
            MainClass.Menu();
        }
    
    检查邮政编码
    int.TryParse()
    仅在
    Regex.Match()
    返回
    true
    并且是解析和分配表达式中的值的方便方法时才会执行

    do {
       Console.WriteLine("Please Provide a State Name: ");
       state = Console.ReadLine();
    } while (!RegEx.IsMatch(state, @"^[a-z]{2}$", RegexOptions.IgnoreCase)) 
    

    这可能更适合于突破一段时间的循环。使用无意义的
    f
    变量可以替换为
    while(true)。。。。。如果(成功)失败这可能更适合于中途中断循环。使用无意义的
    f
    变量可以替换为
    while(true)。。。。。如果(成功)失败