none
C# 代码编译提示"并非所有代码路径都有返回值" RRS feed

  • 问题

  • 代码如下: 编译时提示"并非所有代码路径都有返回值",请给予帮助

    using System;
    namespace MyMethods

    {
         public class  unitCFunctions
         {
              public static string UnitChange( double x )
              {
      
         
          double a;
          int b;
          int c;
          double t1;
          double t2;
          double dec;
          double val;
          string units;
          x=x/2.54;
          a = Math.Ceiling(x);
          dec = x - a;
          val=1;
          int[] Ar =new int[]{0,1,2,3,5,7,11,13,17,19};
          int[] Br =new int[]{2,4,8};
         
        
         for(int j = 0; j< 3; j++)
         {
             for (int i = 0; i <= 9; i++)
             {
                 if (Ar[i] > Br[j])
                 {
                     break;
                 }
                 else
                 {
                     if (Math.Abs(dec - Ar[i] / Br[j]) < val)
                     {

                         val = Math.Abs(dec - Ar[i] / Br[j]);
                         c = Br[j];
                         b = Ar[i];


                         if (a < 12)
                         {
                             if (b != 0)
                             {
                                 units = a.ToString() + " " + b.ToString() + "/" + c.ToString();

                              return units;

                             }

                             else
                             {
                                 units = a.ToString();
                                return units;
                             }
                           
                         }
                         else
                         {
                             if (b != 0)
                             {
                                 t1 = Math.Ceiling(a / 12);
                                 t2 = a % 12;
                                 units = t1.ToString() + t2.ToString() + " " + b.ToString() + "/" + c.ToString();

                                 return units;
                             }
                             else
                             {
                                 t1 = Math.Ceiling(a / 12);
                                 t2 = a % 12;
                                 units = t1.ToString() + t2.ToString() ;

                                 return units;
                             }

                         }
               
                     }

                 }

             }
           
         }

     
         }
        
      }

    }

     

    2014年4月30日 8:33

答案

全部回复

  • if (Ar[i] > Br[j])
                 {
                     break;
                 }

    这里没有返回值


    James.Ying

    2014年4月30日 9:28
  • 已经在代码上增加

     if (Ar[i] > Br[j])
                 {
                     break;

                      return units;

                  }

    依然提示"并非所有代码路径都有返回值"

    2014年4月30日 15:16
  • 应该直接return而不需要break。或者直接在两个循环外面加return

    for(int j = 0; j< 3; j++)
     {
             for (int i = 0; i <= 9; i++)
             {
              ...
             }
    }
    
    return 你想要的返回的值

    2014年4月30日 16:43
  • return units;

    放到

    public static string UnitChange( double x )
              {

    对应的}前


    http://feiyun0112.cnblogs.com/

    2014年5月4日 2:21
    版主
  • 看楼上表述,已经找到了没有返回值的地方和解决方法,我要说一句的是,这种情况如果正常情况下都在循环里返回的话,那么在非正常情况下应该返回一个默认无意义的值,如果这里是引用类型的话,通常返回default(type),string通常返回string.Empty,这样在调用的时候会减少没有对返回值进行检查而造成的空引用异常
    2014年5月5日 7:56
  • 你需要这样做:

    1. 注释掉所有的----------return units;
    2. 为units初始化一个空值(例如:string.Empty;)
    3. 在方法public static string UnitChange( double x ){}最后一行添加 return units;
    2014年5月5日 10:08