【问题标题】:Is it possible or worth sending an array to another method c#是否有可能或值得将数组发送到另一个方法 c#
【发布时间】:2015-04-10 11:35:37
【问题描述】:

在我的代码中,我有两种方法,一种是主要方法,另一种是“MethodA”。在 main 方法中,我将显示 MethodA 中的所有其他功能。但是,在 MethodA 中,我试图将几个文件读入一个数组并将它们返回给 main 方法,以便可以使用它们。我要问的问题是:(我已经为这个问题浓缩了我的主要方法,它确实包括其他未在此链接的项目)

1:值得将文件读入数组吗?

2:我应该只在主目录中使用“ReadFiles”,而不是其他方法吗?

static void Main(string[] args) // THE MAIN INCLUDES MAINLY ONLY THE WRITELINES AND WHAT IS SEEN
        {
string value = MethodA();
           Console.WriteLine(value);

            Console.ReadKey();
        }

        public string[] MethodA() //FILE METHOD - READS IN THE FILES THEN RETURNS THEM TO MAIN METHOD
        {
            StreamReader dayFile = new StreamReader("c:..\\Files\\Day.txt"); StreamReader dateFile = new StreamReader("c:..\\Files\\Date.txt");
            StreamReader sh1Open = new StreamReader("c:..\\Files\\SH1_Open.txt"); StreamReader sh1Close = new StreamReader("c:..\\Files\\SH1_Close.txt");
            StreamReader sh1Volume = new StreamReader("c:..\\Files\\SH1_Volume.txt"); StreamReader sh1Diff = new StreamReader("c:..\\Files\\SH1_Diff.txt");
            StreamReader sh2Open = new StreamReader("c:..\\Files\\SH2_Open.txt"); StreamReader sh2Close = new StreamReader("c:..\\Files\\SH2_Close.txt");
            StreamReader sh2Volume = new StreamReader("c:..\\Files\\SH2_Volume.txt"); StreamReader sh2Diff = new StreamReader("c:..\\Files\\SH2_Diff.txt");

            string dayString = dayFile.ReadToEnd(); string dateString = dateFile.ReadToEnd(); string Sh1OpenString = sh1Open.ReadToEnd(); string Sh1CloseString = sh1Close.ReadToEnd();
            string Sh1VolumeString = sh1Volume.ReadToEnd(); string Sh1DiffString = sh1Diff.ReadToEnd(); string Sh2OpenString = sh2Open.ReadToEnd(); string Sh2CloseString = sh2Close.ReadToEnd();
            string Sh2VolumeString = sh2Volume.ReadToEnd(); string Sh2DiffString = sh2Diff.ReadToEnd();

            string[] fileArray = new string[] { dayString, dateString, Sh1OpenString, Sh1CloseString, Sh1VolumeString, Sh1DiffString, Sh2OpenString, Sh2CloseString, Sh2VolumeString, Sh2DiffString };
            return fileArray;
        }

【问题讨论】:

  • 您不只是使用File.ReadAllText 有什么原因吗?你这样做的方式似乎不必要地复杂。
  • 你需要所有文件的内容同时并行吗?那么很可能是的。但是,如果您需要它们 - 至少需要一些顺序 - 然后不,请节省内存。
  • 我相信是的,我使用 File.ReadAllText 因为我需要读取特定文件中的所有文本,然后我需要能够搜索和排序文件,我我更正使用它吗?
  • 以后,我将添加一个搜索功能——它允许用户按日期搜索,并且该特定日期应显示每个文件中的特定文本字符串。
  • 这可以编译吗?您正在将字符串数组分配给字符串变量value

标签: c# arrays methods


【解决方案1】:

我认为将它们全部阅读一遍是可以的 - 除非您知道这些文件是否很大。

我会这样做:

    public string[] MethodA()
    {
        var filenames = new []
        {
            "Date.txt",
            "Day.txt",
            "SH1_Close.txt",
            "SH1_Diff.txt",
            "SH1_Open.txt",
            "SH1_Volume.txt",
            "SH2_Close.txt",
            "SH2_Diff.txt",
            "SH2_Open.txt",
            "SH2_Volume.txt",
        };

        return
            filenames
                .Select(fn => File.ReadAllText("c:..\\Files\\" + fn))
                .ToArray();
    }

【讨论】:

    【解决方案2】:

    这取决于文件是否相当小。如果它们有几 GB 大,你就会遇到问题。在这种情况下,您应该尝试顺序读取文件。

      public static IEnumerable<string> ReadLines(Stream stream)
      {
         using (var reader = new StreamReader(stream))
         {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
               yield return line;
            }
         }
      }
    

    顺便说一句:StreamReader 应始终与“using”关键字一起使用,否则它会使文件保持打开状态,直到垃圾收集器完成超出范围的实例。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2020-01-21
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 2020-12-22
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多