다양한 속성에 대한 일반 foreach 루프
-
21-12-2019 - |
문제
다른 매개변수를 인수로 전달하는 foreach 루프에 대한 일반적인 방법을 사용하려고 합니다.
아래 예에서는 다양한 매개변수(EmployeeDisplayOrder 또는 EmployeeEnrollOrder)를 전달하고 싶습니다.
public void SaveEmployeeDisplayOrder(ICollection<Employee> employees)
{
//some code
foreach( var emp in employees)
{
UpdateSpecificEmployeeOrder(employee.id, e => e.EmployeeDisplayOrder);
}
}
public void SaveEmployeeEnrollOrder(ICollection<Employee> employees)
{
//some code
foreach( var emp in employees)
{
UpdateSpecificEmployeeOrder(employee.id, e => e.EmployeeEnrollOrder);
}
}
나는 이런 것을 갖고 싶다
public void UpdateEmployeeOrders(ICollection<Employee> employee)
{
foreach( var emp in employees)
{
UpdateSpecificEmployeeOrder(employee.id, //generic property);
}
}
SaveEmployeeDisplayOrder 및 SaveEmployeeEnrollOrder에서 이 UpdateEmployeeOrders 일반 메서드를 호출합니다.
UpdateSpecificEmployeeOrder에 대한 메서드 서명
UpdateSpecificEmployeeOrder( int employeeid, params Expression<Func<Employee, object>>[] property)
이것이 가능한가?
해결책
답변에서 답변이 있습니다 ... 람다를 사용하고 있습니다 ... 그래서 귀하의 방법에 대리인을 전달하십시오.
public void SaveEmployeeDisplayOrder<T>(ICollection<Employee> employees, Func<Employee, T> fetchProperty)
{
//some code
foreach( var employee in employees)
{
UpdateSpecificEmployeeOrder(employee.id, fetchProperty(employee));
}
}
.
다음은 가지고있는 것과 유사하게 부릅니다 :
SaveEmployeeDisplayOrder(employees, e => e.EmployeeDisplayOrder);
.
또는
SaveEmployeeDisplayOrder(employees, e => e.EmployeeEnrollOrder);
. 다른 팁
전달하는 메서드와 마찬가지로 메서드에서 표현식을 허용하도록 합니다.
public class Foo
{
public void UpdateEmployeeOrders(IEnumerable<Employee> employees,
Expression<Func<Employee, object>> selector)
{
foreach (var employee in employees)
{
UpdateSpecificEmployeeOrder(employee.id, selector);
}
}
}
또한, 우리가 하는 유일한 일은 employees
반복하는 경우 매개변수를 다음과 같이 입력할 수 있습니다. IEnumerable
대신에 ICollection
.이는 이 메소드에 필요한 모든 보장을 제공하는 동시에 더 넓은 범위의 가능한 입력 유형을 허용합니다.
제휴하지 않습니다 StackOverflow