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);
我有一个锯齿状数组,它在 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);