簡體   English   中英

C#如何寫入數組的每個部分?

[英]C# How do I write to each part of my array?

我想為數組的每個部分編寫一個不同的“ if”語句。 例如,有關NHS編號,出生日期,職稱等的if語句。它們都將具有不同的'if'語句。

如何為所有這些單獨編寫if語句?

這是系統的一部分,該系統將檢查字段的有效性。

我努力了:

string[] NHSarray = new string[0];

我認為該語法符合我需要做的事情,只是無法弄清楚。

List<int> NHSnumber = new List<int>();
List<int> DateOfBirth = new List<int>();
List<int> Title = new List<int>();
List<int> GivenName = new List<int>();
List<int> Surname = new List<int>();
List<int> Gender = new List<int>();

using (var reader = new StreamReader(@"C:\Users\wy6282\Desktop\VS\nhsBatchChecker\Patients.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        //split the line
        string[] parts = line.Split(new[] { "Error" }, StringSplitOptions.None);

        //get valid integers
        NHSnumber.Add(GetInt(parts[0].Split(' ', '\'')));
        DateOfBirth.Add(GetInt(parts[1].Split(' ', '\'')));
        Title.Add(GetInt(parts[2].Split(' ', '\'')));
        GivenName.Add(GetInt(parts[3].Split(' ', '\'')));
        Surname.Add(GetInt(parts[4].Split(' ', '\'')));
        Gender.Add(GetInt(parts[5].Split(' ', '\'')));
    }
}

假設您的患者信息始終包含所有列出的數據以及相同的順序,那么我會將映射出的數據映射到一個對象中,該對象可能稱為“患者”:

public class Patient
{
    public int NHSNumber {get; set;}
    public dateTime DateOfBirth {get; set;}
    public string Title {get; set;}
    public string GivenName {get; set;}
    public GenderOptions Gender {get; set;}
}

創建枚舉GenderOptions:

public enum GenderOptions
{
    M,
    F,
    U
} 

獲得對象后,請對其進行驗證。 您可以通過多種方法來執行此操作,但是可以使用以下簡單方法:

public bool IsValidPatient(Patient patient)
{
    // setup guard clauses
    if(patient.NHSNumber < 10) return false;
    if(patient.DateOfBirth.Year < 1900) return false

    // more checks
}

當然,如果要根據發生的錯誤顯示錯誤,則可以返回某種狀態對象,而不是布爾值,它包含一個消息字段或一些表明錯誤的內容。 如果這些檢查並非僅針對患者,則您可能需要將其拆分為單獨的檢查,然后將您需要的內容分組為一種驗證患者的方法。

根據您的描述,您試圖逐行讀取文件中的某些輸入,並按某個鍵進行拆分(看起來您試圖將單詞“ Error”用作拆分器,這似乎很奇怪),然后解析內容轉化為有用的數據。 正確?

如果您正在讀取的文件具有不變的已知格式,則基本上,您只需要訪問“部件”數組的正確元素並分配值即可。 您走在正確的軌道上。 我建議,如果您知道數據源每個部分的數據類型是什么,則應使用適當的轉換,而不是嘗試手動解析它。

您可以使用Integer.TryParse(string, out int)來確保無效數據不會導致未處理的異常,但這需要額外的步驟。

int nhsNum;
if(!Integer.TryParse(part[0], out nhsNum) {
    // handle invalid number values here.
}
// at this point nhsNum will have the correctly parsed integer value.
NHSNumber.add(nhsNum)

您將對“ part”數組中的每個元素重復此操作。

如果文件中的日期格式與系統的日期格式匹配,則可以使用DateTime.TryParse(String, out DateTime) 但是,為了更好地處理全球化,如果文件包含預定義的日期格式,則還可以使用DateTime.TryParseExact(String,String,IFormatProvider,DateTimeStyles,DateTime)並通過IFormatProvider使用確切的日期格式。

最后一點。 您的“ dateOfBirth”可能應該是一個List<DateTime>而不是一個List<int>

暫無
暫無

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

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