我有一个班级员工:
public class Employee
{
public Employee()
{
}
public int Id { get; set; }
public string Name { get; set; }
public Employee Manager { get; set; }
}
和一个包含所有员工的csv文件,一行的第一部分是Id,第二部分是名称,第三部分是经理的Id,如果它是空的那么员工没有经理:
2;John;1
1;James;
3;Linda;1
我创建了一个类CsvReader,在这个类中我有一个方法GetEmployees,问题是我无法为属性管理器赋值!
...
var lines = File.ReadAllLines(this.FilePath);
foreach (var line in lines)
{
var parts = line.Split(';');
var emp = new Employee();
emp.Id = int.parse(parts[0]);
emp.Name = parts[1];
emp.Manager = ????
}
return employees;
}
我希望问题很清楚
答案 0 :(得分:0)
这可以通过以下步骤解决:
读入所有记录;存储管理员标识(但不要指定管理员值)。为简单起见,只需在Employee类型中添加另一个属性。
创建Employee对象后,将其添加到public class LoginDialogTest extends WebTest {
@Test
public void testLoginDialogFromHeader {
new HomePage().loadPage();
new Header().clickLogin().login();
verifyLoggedIn();
}
@Test
public void testLoginDialogFromArticleComment {
new ArticlePage(42).loadPage(); // Load an article with id=42
new Article().postComment().login();
verifyLoggedIn();
}
}
public class LoginDialog {
public LoginDialog(Article.CommentButton commentButton) {
}
public LoginDialog(Header.LoginButton loginButton) {
}
public void login() {
}
}
public class Article {
public class CommentButton {
private CommentButton() {
}
public LoginDialog click() {
return new LoginDialog(this);
}
}
public LoginDialog postComment() {
return new CommentButton().click();
}
}
public class Header {
public class LoginButton {
public LoginDialog click() {
return new LoginDialog(this);
}
}
public LoginDialog clickLogin() {
return new LoginButton().click();
}
}
,其中键是员工ID。
读完所有记录后,循环遍历Employees字典(顺序无关紧要),并为每个Employee分配Manager值。 (Manager Employee对象为Dictionary<int,Employee>
。)
答案 1 :(得分:-1)
创建Dictionary<int, Employee>
,在员工Id和Employee
类实例之间存储映射,表示该员工并使用它来获取对经理的引用:
var lines = File.ReadAllLines(this.FilePath);
var mapping = new Dictionary<int, Employee>();
foreach (var line in lines)
{
var parts = line.Split(';');
var emp = new Employee();
emp.Id = int.parse(parts[0]);
emp.Name = parts[1];
if(!string.NullOrEmpty(parts[2]))
emp.Manager = mapping[int.Parse(parts[2])];
mapping[emp.Id] = emp;
}
它不是防弹的,它要求CSV中的数据是正确的:
但它应该让你知道如何解决你的问题。