分享自己学习C#以来写的第一个程序--控制台计算器
希望大家提提意见怎样简化这一块代码: switch (operactor)
{
case Operactor.add:
doCounting(numberArray,add);
break;
case Operactor.minus:
doCounting(numberArray,minus);
break;
case Operactor.multiply:
doCounting(numberArray,multiply);
break;
case Operactor.dividedBy:
doCounting(numberArray,divideBy);
break;
case Operactor.pow:
doCounting(numberArray,pow);
break;
case Operactor.sqrt:
doCounting(numberArray,sqrt);
break;
default:
break;
}
{
case Operactor.add:
doCounting(numberArray,add);
break;
case Operactor.minus:
doCounting(numberArray,minus);
break;
case Operactor.multiply:
doCounting(numberArray,multiply);
break;
case Operactor.dividedBy:
doCounting(numberArray,divideBy);
break;
case Operactor.pow:
doCounting(numberArray,pow);
break;
case Operactor.sqrt:
doCounting(numberArray,sqrt);
break;
default:
break;
}
以下是程序源码
程序代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleCount { class Program { delegate void Count (params decimal[] num); static void doCounting(decimal[] num, Count count) { count(num); } static void Main(string[] args) { if (args.Length >= 1 && (args[0].ToLower().Equals("--help") | args[0].ToLower().Equals("help"))) PrintHelp(); if (args.Length < 2) { Console.WriteLine("没有收到系统传来的有效参数"); Environment.Exit(1); } Operactor operactor = 0; try { operactor = (Operactor)Enum.Parse(typeof(Operactor), args[0], true); } catch (ArgumentException) { Console.WriteLine(args[0] + "为无效运算符"); Environment.Exit(1); } decimal[] numberArray = new decimal[args.Length - 1]; int i = 1; while (i < args.Length) { numberArray[i - 1] = convertToDecimal(args[i]); i++; } switch (operactor) { case Operactor.add: doCounting(numberArray,add); break; case Operactor.minus: doCounting(numberArray,minus); break; case Operactor.multiply: doCounting(numberArray,multiply); break; case Operactor.dividedBy: doCounting(numberArray,divideBy); break; case Operactor.pow: doCounting(numberArray,pow); break; case Operactor.sqrt: doCounting(numberArray,sqrt); break; default: break; } } static decimal convertToDecimal(String val) { decimal num = 0m; try { num = Convert.ToDecimal(val); } catch (FormatException ) { Console.WriteLine("尝试将字符串" + val + "转化为decimal类型时,抛出FormatException异常."); Environment.Exit(1); } return num; } enum Operactor { add, //加 minus, //减 multiply, //乘 dividedBy, //除以 pow, //乘方 sqrt //开平方 } static void add(params decimal[] num) { foreach (decimal d in num) Console.WriteLine(d); decimal result = 0; foreach (decimal d in num) result += d; Console.WriteLine("以上数字的相加结果为" + result); } static void minus(params decimal[] num) { foreach (decimal d in num) Console.WriteLine(d); decimal result = num[0] * 2; foreach (decimal d in num) result -= d; Console.WriteLine("以上数字的相减结果为" + result); } static void multiply(params decimal[] num) { foreach (decimal d in num) Console.WriteLine(d); decimal result = 1; foreach (decimal d in num) result *= d; Console.WriteLine("以上数字的相乘结果为" + result); } static void divideBy(params decimal[] num) { foreach (decimal d in num) Console.WriteLine(d); decimal result = 1; foreach (decimal d in num) result /= d; Console.WriteLine("以上数字的相除结果为" + result); } static void pow(params decimal[] num) { int i = 1; while (i < num.Length) { Console.WriteLine(num[i - 1] + "的" + num[i] + "次幂为" + Math.Pow((double)num[i - 1],(double)num[i])); i += 2; } if (num.Length % 2 != 0) Console.WriteLine("将不对" + num[num.Length - 1] + "进行任何操作."); } static void sqrt(params decimal[] num) { foreach (decimal d in num) Console.WriteLine(d + "的算数平方根是" + Math.Sqrt((double)d)); } static void PrintHelp() { string[] array = new string[8]; array[0] = "获得一串数字的计算结果。\n"; array[1] = "ConsoleCount [add | minus | multiply | dividedBy | pow | sqrt] [...]\n"; array[2] = "add 返回后面一串数字的和。"; array[3] = "minus 返回后面一串数字的差。"; array[4] = "multiply 返回后面一串数字的积。"; array[5] = "dividedBy 返回后面一串数字的商。"; array[6] = "pow 返回n的n+1次幂。"; array[7] = "sqrt 返回后面一串数字的正平方根。"; foreach (string str in array) Console.WriteLine(str); Environment.Exit(0); } } }
binary:https://cspractice.
谢谢~~