public int CompareTo(object obj)
        {
            if (obj is person)
            { 
                person otherperson = obj as person;
                return this.Age - otherperson.Age;
            }
            else
            { 
                throw new ArgumentException("用来比较的对像不是person对像");
                
            }
                int a=10; //变成无法访问代码
            
        }
请教:上面代码.     1、是不是throw 可以代替return呢。因为带有返回值的方法必须return出去一个值,但是这里的return在if语句中。
     2、变量a,变成了无法访问的代码,是不是说throw以后,方法就停止运行了或者说是直接跳出方法了。

解决方案 »

  1.   

    throw和return是两回事
    throw后,不会继续执行
      

  2.   

    throw应该写在程序的最后面,因为throw以后的所有代码都不会执行
      

  3.   

    throw 都已经向上抛了,就不会执行你下面的语句了 你throw后 不用return 也不会错
      

  4.   

    问题回答:
    1、throw 不可以用return代替,你这个方法是返回一个int类型,所有每个if……分支都要有返回int值,
    而throw是抛出异常,程序出现异常时用到,这时程序中止,后面的都不执行。
    2、变量a,如果出现异常,遇到throw程序就中止了,a当然就变成了无法访问的代码。
      

  5.   

    一般情况都将throw 放在最后处理。
      

  6.   

    return的只能返回方法声明类型的返回值,而且return跟throw完全不一样, throw是抛异常,程序返回到堆栈中的上一个对应的catch,而且return是只是返回,看看下面这个class Program
        {
            static void Main(string[] args)
            {
                Console.Write(GetExecption("Empty").Message);            Console.ReadKey();
            }        static Exception GetExecption(String str)
            {
                return new Exception(str);
            }
        }
      

  7.   

    问题回答:
    1、throw 不可以用return代替,你这个方法是返回一个int类型,所有每个if……分支都要有返回int值,
    而 throw是抛出异常,程序出现异常时用到,这时程序中止,后面的都不执行。
    2、变量a,如果出现异常,遇到throw程序就中止了,a当然就变成了无法访问的代码。
      

  8.   


    第二个问题是因为  你定义的int类型的A是方法中的局部变量,在方法外是不能访问到的,。,。。
      

  9.   

    补充一下,无论执行if块,还是执行else块,程序都会返回,所以后面的代码永远不会被执行。