문제

다른 매개변수를 인수로 전달하는 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.이는 이 메소드에 필요한 모든 보장을 제공하는 동시에 더 넓은 범위의 가능한 입력 유형을 허용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top