2 回答

TA貢獻1779條經驗 獲得超6個贊
假設您的患者信息始終包含所有列出的數據,并且順序相同,我會將拆分后的數據映射到一個對象中,可能稱為患者:
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
}
當然,如果你想根據出錯的地方顯示錯誤,那么你可以返回某種狀態對象而不是 bool,它包含一個消息字段或指示錯誤的東西。如果這些檢查并非僅針對患者,那么您可能希望將它們拆分成單獨的檢查,并將您需要的內容分組為一種驗證患者的方法。

TA貢獻1821條經驗 獲得超6個贊
根據您的描述,您正在嘗試逐行讀取文件中的一些輸入,按某個鍵拆分(看起來您正在嘗試使用“錯誤”一詞作為拆分器,這看起來很奇怪),然后解析內容轉化為有用的數據。正確的?
如果您正在讀取的文件具有不變的已知格式,基本上您只需要訪問“部分”數組的正確元素并分配值。你走在正確的軌道上。我建議,如果您知道數據源每個部分的數據類型是什么,那么您可以使用適當的轉換而不是嘗試手動解析它。
您可以使用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)
您將為“部分”數組中的每個元素重復此操作。
DateTime.TryParse(String, out DateTime)如果文件中的日期格式與系統的日期格式匹配,則可以使用。但是,為了更好地處理全球化,如果文件包含預定義的日期格式,您還可以使用DateTime.TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)并通過 IFormatProvider 使用準確的日期格式。
最后一點。您的“dateOfBirth”可能應該是 aList<DateTime>而不是 aList<int>
- 2 回答
- 0 關注
- 128 瀏覽
添加回答
舉報