سؤال

أحاول استخدام طريقة عامة لحلقة فوريش التي من شأنها تمرير معلمة مختلفة كوسيطة.

في هذا المثال أدناه أود أن تمرير معلمات مختلفة (إمبوسيديديسبلايوردر أو إمبوسيدينرولوردر)

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);
  }
}

واستدعاء هذه الطريقة العامة أوبداتيمبلويوردرز من سافيمبلويدسبلايوردر و سافيمبلويينرولوردر.

طريقة التوقيع للتحديثموظف محددأمر

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

هل هذا ممكن?

هل كانت مفيدة؟

المحلول

لديك إجابة في إجابتك ... أنت تستخدم Lambdas ... حتى تمرد مندوب في طريقتك.

giveacodicetagpre.

ثم تسميها مماثلة لما كان لديك:

giveacodicetagpre.

أو

giveacodicetagpre.

نصائح أخرى

اجعل الطريقة تقبل تعبيرا ، تماما كما تفعل الطريقة التي تمررها إليها:

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