C# - GetInt(string [])':并非所有代码路径都返回一个值

时间:2014-10-31 14:40:08

标签: c#

我正在以下面的格式运行以下代码,我收到此错误消息" 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);
        }
    }
}

3 个答案:

答案 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();

因为如果没有可以解析的字符串,FirstOrDefaultLastOrDefaultint返回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块中返回一个值。您需要返回一个值或抛出异常。