为了账号安全,请及时绑定邮箱和手机立即绑定

C# 如何写入数组的每个部分?

C# 如何写入数组的每个部分?

C#
陪伴而非守候 2022-11-22 16:22:53

我想为数组的每个部分编写不同的“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(' ', '\'')));

    }

}


查看完整描述

2 回答

?
哆啦的时光机

TA贡献1507条经验 获得超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,它包含一个消息字段或指示错误的东西。如果这些检查并非仅针对患者,那么您可能希望将它们拆分成单独的检查,并将您需要的内容分组为一种验证患者的方法。


查看完整回答
反对 回复 6天前
?
达令说

TA贡献1526条经验 获得超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>


查看完整回答
反对 回复 6天前
  • 2 回答
  • 0 关注
  • 6 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信