簡體   English   中英

在 C# 中創建回調以從文本文件中讀取行

[英]Creating a callback in C# to read lines from a text file

我的程序中有一個名為FileName的參數。 它沒有默認值。 每當設置一個值時,我都想要一個回調來觸發文件的讀取。 我是C#的新手,所以我不知道如何創建回調。

該字段初始化為

public string FileName { get; set; }

每當設置它的值時,我想執行以下代碼行

string[] lines = System.IO.File.ReadAllLines(@FileName);

變量FileName的設置由用戶完成,並由我使用的框架很好地處理,因此它只是獲得我需要了解的回調。 據我目前了解,因為我沒有為FileName提供默認值,所以默認情況下為Null

正如其他人所說,不清楚您為什么堅持設置一個值來觸發文件讀取。 下面顯示了如何從一個表單(或類)獲取數據到另一個表單(或類)。

在此處輸入圖像描述

有關詳細信息,請參閱:

雖然這三者都可用於傳遞數據,但使用哪一種的適當性取決於希望發生什么。

構造函數:

版本 1(屬性):

public class Class1
{
    public string Filename { get; private set; }

    public Class1 (string filename)
    {
        Filename = filename;
    }
}

版本 2(現場):

public class Class1
{
    private string _filename;

    public Class1 (string filename)
    {
        _filename = filename;
    }
}

方法

版本 1(屬性)

public class Class1
{
    public string Filename { get; private set; }

    public void SetFilename (string filename)
    {
        Filename = filename;
    }
}

版本 2(現場)

public class Class1
{
    private string _filename;

    public void SetFilename (string filename)
    {
        _filename = filename;
    }
}

財產:

版本 1:

public class Class1
{
    public string Filename { get; set; }
}

版本 2:

public class Class1
{
    private string _filename;

    public string Filename 
    { 
        get
        {
            return _filename;
        }
        set
        {
            _filename = value;
        }
    }
}

您的 OP 似乎表明您正在嘗試執行類似於以下操作的操作:

警告 - 不推薦以下內容

public class Class1
{
    private string _filename;
    private string[] _lines = null;

    public string Filename 
    { 
        get
        {
            return _filename;
        }
        set
        {
            _filename = value;
             
            //read file
            _lines = System.IO.File.ReadAllLines(@FileName);
        }
    }
}

根據文件的大小,此操作可能需要一些時間才能完成。 因此,不建議將讀取文件的代碼放在屬性設置器中。

而是使用一種方法(推薦):

版本 1:

public class Class1
{
    public string Filename { get; private set; }

    public string[] ReadFile (string filename)
    {
        //set value
        Filename = filename;

       //read file
       return System.IO.File.ReadAllLines(filename);
    }
}

版本 2:

public class Class1
{
    public string Filename { get; private set; }
    public string[] Lines { get; private set; } = null;

    public bool ReadFile(string filename)
    {
        try
        {
            //set value
            Filename = filename;

            //read file
            Lines = System.IO.File.ReadAllLines(filename);
            return true;
        }
        catch (Exception ex)
        {
            //ToDo: add desired code
            throw;
        }
    }
}

版本 3:

public class Class1
{
    public string Filename { get; private set; }
    public string[] Lines { get; private set; } = null;

    public void ReadFile (string filename)
    {
        //set value
        Filename = filename;

       //read file
       Lines = System.IO.File.ReadAllLines(filename);
    }
}

資源:

我想你想要這個? 您只需更改默認的 setter 和 getter。

private string fileName;

public string FileName 
{ 
   get
   { 
      return fileName; 
   } 
   set 
   { 
      fileName = value; 
      string[] lines = System.IO.File.ReadAllLines(@FileName);
   }
}

但也許這是個壞主意,請閱讀評論:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM