【发布时间】:2015-12-24 02:01:13
【问题描述】:
我正在尝试找到一种方法让我的 foreach 循环看起来更干净一些。
假设我有一个“公司”课程。此类包含多个列表,例如 List Employees 和 List Managers。
然后,在我的代码中的某处,我想遍历这些列表。
我可以写:
foreach (Employee in company.Employees) {}
foreach (Manager in company.Managers) {}
但我认为简单地说:
foreach (Employee in company) {}
foreach (Manager in company) {}
但它不允许我这样做。所以我尝试为公司创建一个简单的隐式转换,例如:
static public implicit operator List<Employee>(Company value)
{
return value.Employees;
}
static public implicit operator List<Manager>(Company value)
{
return value.Managers;
}
...令人惊讶的是,这没有给出任何错误,至少在这些行上没有。
但在 foreach 语句中,它给出了错误:CS1579 foreach 语句无法对“Company”类型的变量进行操作,因为“Company”不包含“GetEnumerator”的公共定义。
有没有一种简单的方法可以做到这一点,例如隐式运算符?如果没有,谁能解释为什么这样做必须如此复杂?
【问题讨论】:
-
如果我是你,我会远离隐式转换。它们很少使代码更具可读性、可维护性等,而且很容易出错。
-
foreach (Employee in (List<Employee>) company) {};我认为这会起作用,但正如@sstan 所说,尽量避免隐式转换:)。干杯。 -
你说可以写
foreach (Employee in company.Employees) { }。不,你不能 - 这是一个语法错误。
标签: c# list ienumerable implicit-conversion