将特定类型映射到TResult的Func的最佳方法是什么?例如:
ViewModelBase GetScreen(Type type)
{
// mapping code here
}
ScreenA GetScreenA()
{
// returns new instance of ScreenA
}
// usage
var screen = GetScreen(typeof(ScreenA));
我需要做的是将ScreenA类型映射到GetScreenA()方法(强类型)。每个屏幕都继承自ViewModelBase。实现这一目标的最佳方法是什么?我不是在考虑一堆ifs作为解决方案。
if (type = typeof(ScreenA))
return GetScreenA();
else if ....
答案 0 :(得分:0)
您可以使用字典映射到不同的操作,而不是使用if语句。
private Dictionary<Type , Func<ViewModelBase>> Method2ObjectMap
= new Dictionary<Type , Func<ViewModelBase>>
{
{ ScreenA, GetScreenA },
{ ScreenB, GetScreenB },
{ ScreenC, GetScreenC }
};
然后用类似的东西来打电话:
if(Method2ObjectMap.ContainsKey(ScreenB))
{
return Method2ObjectMap[ScreenB];
}
答案 1 :(得分:0)
这样的事情会帮助你
class TypeA
{
}
class TypeB:TypeA
{
}
class TypeC : TypeA
{
}
private static Dictionary<Type, Func<TypeA>> ScreenMap =
new Dictionary<Type, Func<TypeA>>
{
{typeof(TypeA),()=> new TypeA() },
{typeof(TypeB) ,()=> new TypeB() },
{typeof(TypeC),()=> new TypeC() }
};
并使用它
TypeA a= ScreenMap[typeof(TypeA)]();