这是一个基本的字符串反向程序,我想在其中进行一定程度的异常处理。但在编译过程中它给我一个错误“没有所有代码路径返回值。我无法找出原因
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;
}
答案 0 :(得分:4)
如果发生异常,则不执行返回语句。走过去。
最好的补救措施(我的选择)是删除整个try / catch。像Reverse这样的实用程序函数不应该处理(它自己的)异常。
答案 1 :(得分:4)
如果在return语句之前抛出异常,则调用catch
处理程序。 catch处理程序执行后,它会超过它(因为它中没有return
或throw
语句),此时它到达方法的末尾而不返回值。
编辑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;
}