【发布时间】:2022-01-15 11:09:44
【问题描述】:
我正在编写代码来获取输出(从文本文件中读取):“具有姓名、性别、年龄等实例的人员列表”。但是,当我运行代码时,我只得到了文本文件中列表的第一行。这是我的代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Person_Del
{
class Program
{
public static void Main(String[] args)
{
Console.SetIn(new StreamReader("data.txt"));
List<Person> p = new();
string data = Console.ReadLine();
Person obj = new();
obj.SetData(data,"/");
p.Add(obj);
foreach (var ii in p)
{
Console.WriteLine(ii.GetInfo());
}
}
}
public class Person
{
//static methods
public static void CheckData(string name, string gender, byte age)
{
string msg = null;
if (string.IsNullOrEmpty(name)) msg += "Empty Name";
if (string.IsNullOrEmpty(gender)) msg += (msg != null ? "; " : "") + "Empty Gender";
if (age > 125) msg += (msg != null ? "; " : "") + $"Invalid age ({age})";
if (msg != null) throw new Exception(msg);
}
public static (string, string, byte) Parse(string data, string delimiter)
{
try
{
string[] arr = data.Split(delimiter);
string name = arr[0].Trim();
string gender = arr[1].Trim();
byte age = byte.Parse(arr[2]);
return (name, gender, age);
}
catch (Exception)
{
throw new Exception($"Given data \"{data}\" are invalid.");
}
}
//instance fields
protected string name;
protected string gender;
protected byte age;
//instance methods
public string GetName() => name;
public string GetGender() => gender;
public byte GetAge() => age;
public void SetData(string name, string gender, byte age)
{
Person.CheckData(name, gender, age);
this.name = name;
this.gender = gender;
this.age = age;
}
public void SetData(string data, string delimiter)
{
(string, string, byte) value = Person.Parse(data, delimiter);
string name = value.Item1;
string gender = value.Item2;
byte age = value.Item3;
this.SetData(name, gender, age);
}
public string GetInfo() => $"Name:{name}, Gender:{gender}, Age:{age}";
//new instance methods for homework
public void SetName(string name) => this.name = name;
public void SetGender(string gender) => this.gender = gender;
internal bool SetData()
{
throw new NotImplementedException();
}
}
}
这是我的文本文件(data.txt):
Alice/F/23
David/M/23
注意:我想得到上面两行的输出;然而,我得到的只是第一行“Alice/F/23”。
【问题讨论】:
-
如果要读取文件,请使用
System.IO.File.ReadXXX方法,而不是将控制台输入附加到附加到文件的流读取器上。混乱的秘诀。至少,做using var sr = new StreamReader("file path here")然后反复调用sr.ReadLine()- 不要将控制台用作它的支架