获取错误并非所有代码路径都通过c#编译器返回值

时间:2009-07-18 18:28:19

标签: c# string exception-handling compilation

这是一个基本的字符串反向程序,我想在其中进行一定程度的异常处理。但在编译过程中它给我一个错误“没有所有代码路径返回值。我无法找出原因

 public static string Reverse(string s)
        {
            try
            {
                if (string.IsNullOrEmpty(s))
                {
                    throw new NullReferenceException();
                }

                char[] c = s.ToCharArray();
                int start = 0;
                int end = c.Length - 1;
                char temp;

                while (start < end)
                {
                    temp = c[start];
                    c[start] = c[end];
                    c[end] = temp;
                    start++;
                    end--;
                }
                return new string(c);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

谢谢大家......我将代码改为这样的

 public static string Reverse(string s)
        {
            if (!string.IsNullOrEmpty(s))
            {
                char[] c = s.ToCharArray();
                int start = 0;
                int end = c.Length - 1;
                char temp;

                while (start < end)
                {
                    temp = c[start];
                    c[start] = c[end];
                    c[end] = temp;
                    start++;
                    end--;
                }
                return new string(c);
            }
            else return s;


        }

6 个答案:

答案 0 :(得分:4)

如果发生异常,则不执行返回语句。走过去。

最好的补救措施(我的选择)是删除整个try / catch。像Reverse这样的实用程序函数不应该处理(它自己的)异常。

答案 1 :(得分:4)

如果在return语句之前抛出异常,则调用catch处理程序。 catch处理程序执行后,它会超过它(因为它中没有returnthrow语句),此时它到达方法的末尾而不返回值。

编辑2(主要错误):你抛出一个ArgumentNullException,继续抓住它并“吃掉”它,所以它没有意义(以这种形式)。你应该在输入try块之前进行参数验证,而且这个方法根本不应该使用try块(它会因为没有用的原因而变慢)。

编辑:旁注:

char[] characters = s.ToCharArray();
Array.Reverse(characters);
return new string(characters);

答案 2 :(得分:2)

你必须从catch子句以及try子句中返回一个字符串(或者引发一些异常) - 现在你没有{{1在return子句中。

答案 3 :(得分:2)

在catch块中,您需要返回一个字符串或抛出异常。

答案 4 :(得分:1)

我认为真正的问题是你想如何处理输入的空字符串或空字符串。如果你认为你的方法应该通过静默“纠正”来处理它,你可以返回String.Empty。但是,如果您认为调用方法应该处理此错误,那么抛出异常并且不捕获它似乎是适当的操作过程。无论你选择哪一个,你似乎都不需要try / catch块。

public static string Reverse(string s)
{
     if (String.IsNullOrEmpty(s))
     {
          //option 1
          return String.Empty;
          //option 2
          throw new NullReferenceException();
     }
     //rest of method
}

答案 5 :(得分:1)

更简洁的方法可能如下

static void Main(string[] args)
{
    string reverseMe = "hello world";
    string reversed = ReverseString(reverseMe);
    Console.WriteLine(reversed);
}

private static string ReverseString(string reverseMe)
{
    if (String.IsNullOrEmpty(reverseMe)) return String.Empty;
    char[] reverseMeArray = reverseMe.ToCharArray();
    Array.Reverse(reverseMeArray);
    string result = new string(reverseMeArray);
    return result;
}