我正在以下面的格式运行以下代码,我收到此错误消息" GetInt(string [])':并非所有代码路径都返回值"
此行发生错误消息 - public static int GetInt(string [] a)
只是想知道你是否可以提供帮助?
class Program
{
static void Main(string[] args)
{
List<int> plans = new List<int>();
List<int> events = new List<int>();
using (var reader = new StreamReader(@"D:\Temp\AccessEmail.txt"))
try
{
string line;
while ((line = reader.ReadLine()) != null)
{
//split the line
string[] parts = line.Split(new[] { "Event" }, StringSplitOptions.None);
//get valid integers
plans.Add(GetInt(parts[0].Split(' ', '\'')));
events.Add(GetInt(parts[1].Split(' ', '\'')));
//print the number of elements in the lists
Console.WriteLine(plans.Count);
Console.WriteLine(events.Count);
}
}
catch (System.Exception ex)
{
Console.WriteLine("Error" + ex.Message);
}
}
public static int GetInt(string[] a)
{
try
{
int i = 0;
foreach (string s in a)
int.TryParse(s, out i);
return i;
}
catch (System.Exception ex)
{
Console.WriteLine("Error - could not return int" + ex.Message);
}
}
}
答案 0 :(得分:4)
Try-Catch
让编译器认为异常可能发生在某处。因此,您必须确保始终返回int
:
public static int GetInt(string[] a)
{
int i = 0;
try
{
foreach (string s in a)
int.TryParse(s, out i);
}
catch (System.Exception ex)
{
Console.WriteLine("Error - could not return int" + ex.Message);
}
return i;
}
但是,由于您使用的是TryParse
,因此整个Try-Catch
是多余的。它还不清楚你为什么只想要数组中的最后一个int
。
所以你可以使用它而不是选择所有:
public static IEnumerable<int> GetInts(IEnumerable<string> strings)
{
int i = 0;
return strings.Where(s => int.TryParse(s, out i)).Select(s => i);
}
如果您只想要可以解析的最后int
:
int lastParsable = GetInts(parts[0].Split(' ', '\'')).LastOrDefault();
如果你想全部作为数组:
int[] parsables = GetInts(parts[0].Split(' ', '\'')).ToArray();
因为如果没有可以解析的字符串,FirstOrDefault
和LastOrDefault
为int
返回0,则应该使用此LINQ查询:
int parsable = GetInts(parts[0].Split(' ', '\''));
if(parsable.Any())
{
int lastParsable = parsable.Last();
}
答案 1 :(得分:3)
catch
方法的GetInt
分支不返回任何内容;它应该返回一个值或抛出异常。
如果您只想在记录后重新抛出异常,可以执行以下操作:
catch (System.Exception ex)
{
Console.WriteLine("Error" + ex.Message);
throw;
}
答案 2 :(得分:3)
那是因为你没有从catch块中返回一个值。您需要返回一个值或抛出异常。