3

引数として別のパラメーターを渡す 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);
  }
}

そして、この UpdateEmployeeOrders 汎用メソッドを SaveEmployeeDisplayOrder および SaveEmployeeEnrollOrder から呼び出します。

UpdateSpecificEmployeeOrder のメソッド シグネチャ

UpdateSpecificEmployeeOrder( int employeeid, params Expression<Func<Employee, object>>[] property)

これは可能ですか?

4

2 に答える 2

10

式を渡すメソッドと同じように、メソッドに式を受け入れさせます。

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代わりにas と入力できますICollection。このメソッドが必要とするすべての保証を提供すると同時に、より幅広い入力タイプを許可します。

于 2014-01-08T21:02:46.600 に答える