C# 调用复制的通用方法
我有以下代码:C# 调用复制的通用方法,c#,.net,generics,C#,.net,Generics,我有以下代码: switch (objectType) { case ObjectType.UserReview: return MyMethod<UserReview>(); case ObjectType.ProfessionalReview: return MyMethod<ProfessionalRevi
switch (objectType)
{
case ObjectType.UserReview:
return MyMethod<UserReview>();
case ObjectType.ProfessionalReview:
return MyMethod<ProfessionalReview>();
case ObjectType.Question:
return MyMethod<Question>();
case ObjectType.News:
return MyMethod<News>();
default:
throw new ArgumentOutOfRangeException("objectType");
}
现在我需要相同的代码,但用于调用另一个方法。有没有不需要重复和反思就能实现它的选项?听起来是一个理想的机会。您能否将ObjectType.UserReview升级为一个类?目前它看起来像一个枚举,并将开关块作为多态方法放置?您可以让MyMethod将接口作为参数,例如IOObjectType,如下所示:
MyMethod(IObjectType objectType)
MyMethod(new UserReview()) // Ok because UserReview implements IObjectType
该接口应包含MyMethod将在您的情况下调用的必要和常用方法:
interface ObjectType
{
string GetQuery();
}
然后让每个ObjectType使用自己特定的CreateObjectSet.Where…(即UserReview、ProfessionalReview等)实现该接口
然后按如下方式调用MyMethod:
MyMethod(IObjectType objectType)
MyMethod(new UserReview()) // Ok because UserReview implements IObjectType
最后,只需让MyMethod调用objectType.DoWork即可。您可以传递委托 据我所知,您不能将泛型委托部分解析为提供的方法,而泛型类型是逐案派生的,因此这意味着需要传入4个函数引用
public static string DoStuff<T,U,V,W>(Type objectType,
Action<T> f, Action<U> g, Action<V> h, Action<W> i)
{
switch (objectType)
{
case ObjectType.UserReview:
return f();
case ObjectType.ProfessionalReview:
return g();
case ObjectType.Question:
return h();
case ObjectType.News:
return i();
default:
throw new ArgumentOutOfRangeException("objectType");
}
}
因为这是meReflection的最后一个度量,所以在这里无论如何都不起作用,因为ObjectType!=类型您能在这里添加更多的上下文吗?您能根据MyMethod接收的类型揭示MyMethod的功能吗?@Andreas,它调用ctx.CreateObjectSet.Where…,从而生成实体框架查询