如何读取数据一次,然后在C#中对所述数据执行多次操作?

时间:2012-09-12 15:25:34

标签: c# winforms visual-studio-2010

我用3个按钮创建了一个WindowsForm应用程序。单击任何按钮会显示c:\data.txt并对数据执行不同的“分析”。按钮1可能会在data.txt中添加数字,按钮2可能会对它们进行平均,按钮3可能会将它们相乘。

在每个private void button1_Click下,我有一行代码从data.txt读取数据。这对我来说似乎效率低下,因为在3个按钮点击事件中每个都有相同的“ReadLines”代码。

有没有办法只读ON数据,然后让我的按钮执行分析?

这样,“ReadLines”代码只使用一次,并且数据以某种方式与任何button1_Click事件共享。

4 个答案:

答案 0 :(得分:5)

这并不困难 - 您需要有一个字段来保存您读取的值 - 该字段将可用于该类中的所有函数。

 private string[] data;

 // in constructor:
 data = File.ReadAllLines(@"c:\data.txt");

 // in your methods, simply use data

另一个选择是使用LoadData方法检查data是否为null,并从您的方法中调用它:

private void LoadData()
{
  if(data == null)
    data = File.ReadAllLines(@"c:\data.txt");
}

答案 1 :(得分:2)

如果您想进一步提高效率,可以使用字段和属性来延迟加载它。

private string[] _data;

private string[] Data
{
    get
    {
        return _data ?? _data = File.ReadAllLines(@"c:\data.txt");
    }
}

现在,您的调用代码只需使用该属性,而无需检查该字段是否为空,并且在您需要之前不加载数据。

答案 2 :(得分:1)

向您的班级添加将执行延迟加载的属性。

首先添加一个存储数据的地方

private string[] _FileData;

然后添加新属性

private string[] FileData 
{ 
    get
    {
        if (_FileData != null && _FileData.Length > 0)
            return _FileData;

        _FileData = File.ReadAllLines(@"c:\data.txt");

        return _FileData;
    }
}

然后只需使用FileData属性来获取文件文本。它只会在第一次获取文件文本,之后_FileData将保留您的文件,当您访问FileData时它将被返回。

答案 3 :(得分:1)

这是一个同样通用的答案;)

您可以声明一个共享变量(例如string),在每个按钮单击处理程序上,您检查以查看是空的还是空(String.IsNullOrEmpty(myString))。如果它为空,请执行ReadLines代码并将数据存储在string变量中。然后对变量进行处理。

下次单击按钮时,您将看到string不为空,只处理字符串,而不必再次读取文件。