这是两组活动:
//#1
List<object> AFilterObject = A_List.SelectedList;
List<A> AFilters = new List<A>();
foreach (Aitem in AFilterObject )
{
//Do activity X
}
//#2
List<object> BFilterObj = B_List.SelectedList;
List<B> payopFilters = new List<B>();
foreach (B item in BFilterObj )
{
//Do same activity X }
正如您所看到的,除了所涉及的类型外,这两组活动都很常见。 如何编写一个带有2个参数的方法 - filterObject,Type - 以便我可以以一种常见的方式使用此方法?
为了让自己更清楚,最终目标是:
CommonMethod(List<object> x, Type y???) { //cast x to type y then do some stuff }
//so that I can call
CommonMethod(BFilterObj ,B);
//or
CommonMethod(AFilterObj ,A);
答案 0 :(得分:3)
使用通用方法:
public void ApplyFilters<T>(List<object> x)
{
...
}
您可能需要将一些约束应用于T,以便您可以在方法中执行所需操作。例如:
public void ApplyFilters<T>(List<object> x)
where T : class. ISomeInterface
{
...
}
然后,您可以通过将类型指定为类型参数来调用它:
ApplyFilters<A>(AFilterObj);
ApplyFilters<B>(BFilterObj);
如果在执行时间之前你不知道类型,那就变得有点难了 - 你必须用反射来调用方法。如果是这种情况,请告诉我 - 但除非你真的需要,否则你不想这样做。
答案 1 :(得分:0)
如果它们具有通用接口或基本类型,则可以执行以下操作:
void DoActivities<TItem>(IList<TItem> filterObject) where TItem : SomeBaseType
{
foreach (SomeBaseType item in filterObject)
{
item.DoActivity(/* ... */);
}
}
如果他们没有任何共同点,你可以这样做:
void DoActivities<TItem>(IList<TItem> filterObject, Action<TItem> activity)
{
foreach (TItem item in filterObject)
{
activity(item);
}
}
然后你可以传递一个委托/ lambda表达式:
List<SomeClass> items = new List<SomeClass>();
// ...
DoActivities(items, (item) => item.SomeClassMethod(/* ... */));