这是我从文本文件中读取的代码。它"工作"并从文本文件中读取,但有一个小错误。它返回:{Employee: Name: Name: red ID: 123 ID: Request: Name: Name: toilet ID: 444 Desc: water ID: Desc: }
我知道它为什么这样做,我只是想弄清楚如何解决它。 columns[0]
值为"名称:红色\ t ID:123"并且columnms[1]
值是"名称:toilet \ t ID:444 \ t Desc:water"。
我知道这样做是因为我打电话给assignment.Employee.Name
,但我不知道如何调用它来让它显示在我的表单上。我认为它会像assignment.Employee
,但它会给出错误,我无法将字符串转换为Employee类型。
分配是一个列表,其中包含来自其他列表的两个对象(员工和服务请求)。
public static List<Assignment> GetAssignment()
{
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
StreamReader textIn =
new StreamReader(
new FileStream(path3, FileMode.OpenOrCreate, FileAccess.Read));
List<Assignment> assignments = new List<Assignment>();
while (textIn.Peek() != -1)
{
string row = textIn.ReadLine();
string[] columns = row.Split('|');
if (columns.Length >= 2)
{
Assignment assignment = new Assignment();
assignment.Employee.Name = columns[0];
assignment.Request.Name = columns[1];
assignments.Add(assignment);
}
}
textIn.Close();
return assignments;
}
编辑:我希望它只返回{Employee: Name: red ID: 123 Request: Name: toilet ID: 444 Desc: water}
答案 0 :(得分:0)
很抱歉这不是答案,但由于本网站的规则很奇怪,我不允许添加评论。请告诉我们名为“Assignment”的类或结构的定义,并告诉我们在代码运行后您希望它包含的内容。
答案 1 :(得分:0)
您正在string.Format()
上执行this.Employee
,因此基本上它会在ToString()
对象上执行默认Employee
,该对象将列出所有字段及其关联值。你或许有意这样称呼它:
return string.Format("Employee: {0} \t Request: {1}", this.Employee.Name, this.Request.Name);
或者您可能希望覆盖ToString()
和Employee
对象上的ServiceRequest
以返回所需的结果。
更新
由于您编辑了问题以包含Employee
对象,因此上述内容无关紧要。由于您的column[0]
值实际上包含文字"Name: red \t ID: 123"
,因此在Employee
覆盖ToString
时,您也不需要指定文字"Name:"
。
答案 2 :(得分:0)
此答案基于以下假设:数据文件中的典型文本行如下所示:
姓名:red \ t ID:123 |名称:厕所\ t ID:444 \ t描述:水
这让我觉得它正在编码两个对象,第一个有两个属性(Name和ID),第二个有三个属性(Name,ID,Desc)。
同一行内的对象由管道符号分隔(&#34; |&#34;)。同一对象中的属性由制表符分隔(&#34; \ t&#34;)。每个属性由一个标识符(&#34;名称&#34;,&#34; ID&#34;)和一个值(&#34;红色&#34;,&#34; 123&#34;)组成,由冒号(&#34;:&#34;)。这种对的自然数据结构将是Dictionary<string, string>
。
读取这样的文件会模拟嵌套。
此类员工或其他对象拥有一个字典来存储键/值对,而ToString()只是打印一个键,一个冒号和值来打印每一对。