C# try catch 中使用return 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# try catch 中使用return 的问题相关的知识,希望对你有一定的参考价值。

今天在使用try catch的时候发现一个很奇怪的问题 甚是不解 忘高人指点。
分数不多,请见谅。 在此先行谢过。

1. 在一个static 方法中 代码如下:注意 return在try里面。 此方法没有error。
public static bool isValid()

try

...........................
return isvalid;

catch (Exception ex)

throw ex;


2. 在一个winform 的cs 文件中, 使用了以上模式, 但是报错, 并需要给一个返回值。 改成以下形式才不会报错。注意 return在try catch的外面。
private DataTable saveUser_common()

DataTable dt = null;

try


dt = .....


catch (Exception ex)

MessageBox.Show(CommonMethod.ErrorFormat(ex));


return dt;


请指点为什么会这样呢? 难道是 public static 方法和private 方法的缘故吗 ? 如果真是这样, 又有何依据呢 ?

这跟static 和private没关系。
try和catch都分别要返回,不然就写在try catch外面、最后。

你的两个catch写的不一样啊。。。
第一个catch里面,throw 就是返回了,所以不需要再写return。throw和return是一个功效,就是返回调用此方法的代码。
第二个catch里面没有返回值。
参考技术A 有 throw 了,程序执行到此就要抛出异常到函数外面了,等效于return...
你可以再 throw后面再加一些语句, VS会警告你,检测到无法访问的代码!
参考技术B 检查一下,可能不是每条分支都有返回值。
某个分支漏掉返回值了,所以你在最后补上就不出错了。
你可以一段一段的试,看看是哪里漏掉。
参考技术C 返回一个表示错误的值,比如-1,自己明白就行了

对啊,在WriteLine()之前加一个判断,
如果是表示错误的值,就不要写了啊。
参考技术D actonst 说的对 你下面一个catch里是用了messagebox.show

C#常见面试题——try-catch-finally-return

面试常会被问及try-catch-finally,现在做一下总结:

第一、不管有没有出现异常,finally块中代码都会执行。

第二、finally 代码块中不能有return。

第三、如果try 或catch中有return语句,则在finally中对返回变量的修改不会影响 返回值。

举例如下:

虽然在finally中对变量x进行了修改,但并会影响到返回值(x=2)。

        static int test()
        {
            int x = 1;
            try
            {
                x++;
                return x;
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
                return x;
            }
            finally
            {
                ++x;
                Console.WriteLine("执行finally");                              
            }            
        }

 

以上是关于C# try catch 中使用return 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在C#中,函数中使用异常的时候,try中的return可以返回,但是在catch中的return返回啥?

c# try-finally有啥用?

在aardio的函数里try...catch语句中使用return。

java异常中try或catch语句中可以有return语句吗?如有return会执行finall

try catch finally

C#中如何处理异常?怎么使用try-catch语句?