C# 从方法调用中获取锯齿状数组

C# getting a jagged array from a method call

我有一个锯齿状数组,它在 main 中工作正常,但如果我尝试将它放在一个方法中,我不确定要调用什么。我试过 load(data) 和 return 语句,但我没有任何运气。

public static void load() 
{
    try 
    {
        string[][] data = new[] {
            File.ReadAllLines(@"data\Month.txt"),
            File.ReadAllLines(@"data\Year.txt"),
            File.ReadAllLines(@"data\WS1_AF.txt"),
            File.ReadAllLines(@"data\WS1_Rain.txt"),
            File.ReadAllLines(@"data\WS1_Sun.txt"),
            File.ReadAllLines(@"data\WS1_TMin.txt"),
            File.ReadAllLines(@"data\WS1_TMax.txt"),
        };
        Console.WriteLine("Files have been found, press any key to continue");
        Console.ReadKey();
    }
    catch (Exception) {
        Console.WriteLine("Unable to find files... exiting");
        exit();
    }
}

将您的签名从 void 更新为您希望 return 和 return 您的数组的 return 类型。

public static string[][] load()
{
    try
    {
        string[][] data = new[]
        {
            File.ReadAllLines(@"data\Month.txt"),
            File.ReadAllLines(@"data\Year.txt"),
            File.ReadAllLines(@"data\WS1_AF.txt"),
            File.ReadAllLines(@"data\WS1_Rain.txt"),
            File.ReadAllLines(@"data\WS1_Sun.txt"),
            File.ReadAllLines(@"data\WS1_TMin.txt"),
            File.ReadAllLines(@"data\WS1_TMax.txt"),
        };
        Console.WriteLine("Files have been found, press any key to continue");
        Console.ReadKey();

        return data;
    }
    catch (Exception)
    {
        Console.WriteLine("Unable to find files... exiting");
        return null;
    }
}

请注意,您还必须 return 来自 catch 块的内容,因为您不会重新抛出异常。在这种情况下,return null.

只需从方法中 return 您的数组,并将 load 方法的 return 类型更改为与您正在 returning 的数组相同的类型有(void 意味着你 return 什么都没有)。此外,最好在更高级别处理异常:

public static string[][] load()
{
    string[][] data = new[]
    {
        File.ReadAllLines(@"data\Month.txt"),
        File.ReadAllLines(@"data\Year.txt"),
        File.ReadAllLines(@"data\WS1_AF.txt"),
        File.ReadAllLines(@"data\WS1_Rain.txt"),
        File.ReadAllLines(@"data\WS1_Sun.txt"),
        File.ReadAllLines(@"data\WS1_TMin.txt"),
        File.ReadAllLines(@"data\WS1_TMax.txt"),
    };

    return data;
}

public static void test()
{
    try
    {
        var data = load();

        Console.WriteLine("Files have been found, press any key to continue");
        Console.ReadKey();
    }
    catch (Exception)
    {
        Console.WriteLine("Unable to find files... exiting");
        exit();
    }
}

还考虑使用路径和文件名数组的更加模块化的方法

class Program
{
    public static string[][] ReadFiles(string folder, params string[] files)
    {
        return files.Select((fn) => File.ReadAllLines(Path.Combine(folder, fn))).ToArray();
    }

    static void Main(string[] args)
    {

        var data = ReadFiles(@"data", 
            "Month.txt",
            "Year.txt",
            "WS1_AF.txt",
            "WS1_Rain.txt",
            "WS1_Sun.txt",
            "WS1_TMin.txt",
            "WS1_TMax.txt" );
    }
}

附录

也尽量不要对任何绝对路径进行硬编码,而是使用特殊的文件夹枚举。例如:

var folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);