Select 方法有四个重载方法,都是string类型的,如下
Select(string s1)
Select(string s1, string s2)
Select(string s1, string s2, string s3)
Select(string s1, string s2, string s3, string s4)我想增加下面一个方法,来根据参数的多少来决定重载上面的参数
Select(string[] args) 我目前所使用的方法,有没有方法简写下面的代码?public static string Select(string[] args)
        {
            if (args.Length == 1)
                return Select(args[0].ToString());
            if (args.Length == 2)
                return Select(args[0].ToString(), args[1].ToString());
            if (args.Length == 3)
                return Select(args[0].ToString(), args[1].ToString(), args[2].ToString());
            if (args.Length == 4)
                return Select(args[0].ToString(), args[1].ToString(), args[2].ToString(), args[3].ToString());
            return Select(args[0].ToString(), args[1].ToString(), args[2].ToString(), args[3].ToString(), args[4].ToString());
        }
除了if和case一个一个判断还有其他简单方法吗?

解决方案 »

  1.   

    // 性能上没太大的优化,微不足道
    // 但是需要注意   程序的健壮性在这里!!!
    public static string Select(params string[] args)
            {
               //   程序的健壮性在这里!!!
                if(args == null) throw ArgumentNullExpcetion("args"); 
                switch(args.Length) {
                    case 0:
                    return null; // throw ArgumentExpcetion("args"); // 足够的见状
                    case 1:
                    return Select(args[0]);  // 不要无谓的调用 ToString(),浪费CPU 
                    case 2:
                    return Select(args[0], args[1]);
                    case 3:
                    return Select(args[0], args[1], args[2]);
                    default:
                    return Select(args[0], args[1], args[2], args[3]);
            }
      

  2.   

    假如,你的参数是可变化的,那么上你应该反过来调用的 这样在做参数验证,边界检查的时候才能更加统一化,避免遗落Select(string arg1)
    {
      Select(new string[]{arg1});
    }
    Select(string arg1, string arg2)
    {
      Select(new string[]{arg1, arg2});
    }
      

  3.   

    public static string Select(string[] args)
            {
              string str[]=new string[args.Length];
              for(int i=0;i<args.Length,i++)
              {
                     str[i]=args[i];
              }
               return Select(str);
            }
    应该是这样吧。我用手写可能会写错,但是你应该看的明白这个思路就行了。