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

本文关键字:路径 代码 返回 一个 字符串 C#-GetInt | 更新日期: 2023-09-27 18:28:41

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

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

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

因为如果没有可以解析的字符串,FirstOrDefaultLastOrDefault会为int s返回0,所以应该使用以下LINQ查询:

int parsable = GetInts(parts[0].Split(' ', ''''));
if(parsable.Any())
{
    int lastParsable = parsable.Last();
}

GetInt方法的catch分支不返回任何内容;它应该返回一个值或者抛出一个异常。

如果你只想在记录异常后重新抛出它,你可以这样做:

        catch (System.Exception ex)
        {
            Console.WriteLine("Error" + ex.Message);
            throw;
        }

这是因为您没有从catch块返回值。您需要返回一个值或引发一个异常。