[英]Generic foreach loop for different property
我試圖使用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 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
。 它提供了此方法所需的所有保證,同時允許更廣泛的可能輸入類型。
你的答案中有答案......你正在使用lambdas ......所以在你的方法中傳遞一個委托。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.