Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何写入数组的每个部分?_C#_Arrays - Fatal编程技术网

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

C#如何写入数组的每个部分?,c#,arrays,C#,Arrays,我想为数组的每个部分编写不同的“if”语句。例如,关于NHS编号、出生日期、头衔等的if声明。。。 它们都有不同的“如果”语句 我该如何为它们编写一个单独的if语句 这是检查字段有效性的系统的一部分 我试过: string[] NHSarray = new string[0]; 我认为这个语法与我需要做的事情是一致的,我就是想不出来 List<int> NHSnumber = new List<int>(); List<int> DateOfBirth =

我想为数组的每个部分编写不同的“if”语句。例如,关于NHS编号、出生日期、头衔等的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(' ', '\'')));
    }
}
List NHSnumber=new List();
List DateOfBirth=新列表();
列表标题=新列表();
List GivenName=新列表();
列表姓氏=新列表();
列表性别=新列表();
使用(var reader=new StreamReader(@“C:\Users\wy6282\Desktop\VS\nhsBatchChecker\Patients.txt”))
{
弦线;
而((line=reader.ReadLine())!=null)
{
//分道扬镳
string[]parts=line.Split(新[]{“Error”},StringSplitOptions.None);
//获取有效整数
NHSnumber.Add(GetInt(parts[0].Split(“”,“\”));
DateOfBirth.Add(GetInt(parts[1].Split(''.\''');
Title.Add(GetInt(第[2]部分)。拆分(“”“,”);
Add(GetInt(parts[3].Split(“,\”);
姓氏.Add(GetInt(第[4]部分).Split(''\'');
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;}
}
创建枚举性别选项:

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
}
public bool有效患者(患者)
{
//设置保护条款
如果(patient.NHSNumber<10)返回false;
if(patient.DateOfBirth.Year<1900)返回false
//更多支票
}

当然,如果您想根据错误显示错误,那么可以返回某种状态对象,而不是bool,bool包含消息字段或指示错误的内容。如果这些检查并非仅针对患者,则您可能希望将其拆分为单独的检查,并将您需要的内容分组为一种验证患者的方法。

假设您的患者信息始终包含列出的所有数据以及相同的顺序,我会将拆分后的数据映射到一个对象中,可能被称为病人:

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;}
}
创建枚举性别选项:

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
}
public bool有效患者(患者)
{
//设置保护条款
如果(patient.NHSNumber<10)返回false;
if(patient.DateOfBirth.Year<1900)返回false
//更多支票
}

当然,如果您想根据错误显示错误,那么可以返回某种状态对象,而不是bool,bool包含消息字段或指示错误的内容。如果这些检查不是仅针对患者的,那么您可能希望将它们拆分为单独的检查,并将您需要的内容分组到一种方法中以验证患者。

根据您的描述,您试图逐行读取文件中的一些输入,并按某个键进行拆分(看起来您试图使用“错误”一词)然后将内容解析为有用的数据。对吗

如果正在读取的文件的已知格式不变,则基本上只需访问“部件”数组的正确元素并指定值。你在正确的轨道上。我建议,如果您知道数据源的每个部分的数据类型,那么您应该使用适当的转换,而不是尝试手动解析它

您可以使用
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(字符串,out DateTime)
。但是,为了更好地处理全球化,如果文件包含预定义的日期格式,也可以通过IFormatProvider使用确切的日期格式


最后一个音符。您的“dateOfBirth”可能应该是一个
列表,而不是
列表

从您的描述中,您试图逐行读取文件中的一些输入,在某个键上拆分(看起来您试图使用“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(字符串,out DateTime)
。但是,为了更好地处理全球化,如果文件包含预定义的日期格式,也可以通过IFormatProvider使用确切的日期格式


最后一个音符。您的“出生日期”可能应该是一个
列表,而不是
列表

如果您试图编写
语句,您的“出生日期”应该是什么?这一点还不清楚。虽然可以使用六个单独的数组来完成您想要做的事情(我是说,即使没有意识到您想要做什么),但是如果您创建一个具有