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

时间:2016-04-19 23:48:26

标签: c# jagged-arrays

我有一个锯齿状数组,它在main中工作正常,但如果我尝试将它放在一个方法中,我不确定要调用什么。我已经尝试load(data)并返回陈述,但我没有运气。

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

3 个答案:

答案 0 :(得分:1)

只需从方法中返回您的数组,并将load方法的返回类型更改为与您返回的数组相同的类型(void表示您已经什么都不回来)。此外,更好的办法是处理更高级别的例外:

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

答案 1 :(得分:0)

将您的签名从void更新为您希望返回的返回类型并返回您的阵列。

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;
    }
}

请注意,您必须从catch块返回一些内容,因为您不会重新抛出异常。在这种情况下,请返回null

答案 2 :(得分:0)

还考虑使用路径和文件名数组

的更模块化方法
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);