c# - 如何使用另一个类的列表变量迭代循环?
问题描述
我正在使用 C#。我有一个 Employee 类,我从 URL 获取员工数据,然后我在另一个类中创建了一个名为 EmpList 的列表,该类正在填充该信息。我没有得到每个员工的位置,所以我想通过在 Employee 类中设置位置函数来硬编码位置。当前上下文中不存在名称“EmpList”。
我尝试在 CreateEmpList 函数中创建 setLocation 函数,但没有出现错误,但位置为空。我知道我可能在做一些愚蠢的事情,但我真的需要一些帮助。我非常感谢。谢谢你。
这是我的员工班。
public class Employee
{
public string Name { get; set; }
public string Email { get; set; }
public Guid ID { get; set; }
public string Location { get; set; }
public void SetLocation()
{
foreach (var item in EmpList) // I'm getting error here
{
if (item.Email == "abc@gmail.com")
{
item.Location = "US";
}
}
在这里,我将列表填充到另一个类中。
private List<Employee> EmpList = null;
private void CreateEmpList(SPHttpClient client)
{
List<Employee> SortedList = new List<Employee>();
JObject jsondata = client.ExecuteJson(UriResources);
string strjsondata = jsondata.First.First.First.First.ToString();
JArray jsonArray = JArray.Parse(strjsondata);
foreach (var item in jsonArray) // Creating master resources list
{
ResourcesExcemptList.ForEach(i => i.ToLower());
if(!ResourcesExcemptList.Contains(item["ResourceEmailAddress"].
ToString().ToLower()))
{
if (Boolean.Parse(item["ResourceIsActive"].ToString()))
{
Employee emp = new Employee();
emp.ID = (Guid)item["ResourceId"];
emp.Email = item["ResourceEmailAddress"].ToString();
emp.Name = item["ResourceName"].ToString();
emp.Practice = item["ResourceGroup"].ToString();
emp.ApproverID =
(Guid)item["ResourceTimesheetManageId"];
SortedList.Add(emp);
}
}
}
EmpList= SortedList.OrderBy(o => o.Name).ToList();
//private void setLocation(){ }
}
解决方案
直接回答你的问题
这里的主要问题是您不了解面向对象的代码是如何工作的。您没有使用this
,并且您似乎对何时执行类方法以及这意味着什么感到困惑。
奇怪的是,当在一个类方法中时,您仍然希望您需要查看列表以找到正确的对象。这与你应该如何处理它相反。
当一个对象的类方法被执行时,你显然已经找到了你要调用其方法的对象。因为否则您将无法调用该对象的类方法。
所以在这里你需要做的是在调用对象的类方法之前迭代列表,而不是之后。你的Employee
班级:
public void SetLocation()
{
this.Location = "US";
}
接着:
private void CreateEmpList(SPHttpClient client)
{
// the rest of the code
EmpList = SortedList.OrderBy(o => o.Name).ToList();
foreach(var employee in EmpList)
{
employee.SetLocation();
}
}
脚注
您的问题显示了对 OOP 原则的基本混淆,但代码本身显示了对 OOP 原则的不同程度的掌握。我怀疑您自己没有编写此代码,但一位同事编写了。
我之所以提到这一点,是因为我注意到您的示例代码中的注释:
//private void setLocation(){ }
请注意,它的签名是方法定义的签名,而不是方法调用的签名!
我认为发生的事情是你的同事注释了代码并提醒你创建一个方法,你最终在Employee
类而不是另一个类中实现了这个方法(其中有CreateEmpList
方法的那个) .
在另一个类中创建方法比将其放入类中更有意义Employee
。类似于以下内容:
public void SetLocation(Employee employee)
{
employee.Location = "US";
}
推荐阅读
- python - 如何编写 mysql db 数据的 if 条件(条件:qty == 0)然后电子邮件应该发送给管理员
- r - 为什么不同组之间的 p 值总是相同的,有人知道我在做什么错吗?
- excel - 将图像从 Excel 粘贴到 Word 中的特定占位符
- python-3.x - 当用硒和美丽的汤刮页面时,我会得到一些结果的重复
- amazon-sqs - Masstransit amazon-sqs 健康检查问题
- c++ - 为什么所有指针都没有被释放?
- javascript - 如何恢复来自 GetStream.io 提要的反应
- python - 使用 PyQt5 更新接口
- swift - 使用 PythonKit 加载 python 文件时遇到问题
- karate - 由于扩展协商错误,空手道 WebSocket 连接失败