我有一个通用的方法
bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;
如何通过以下方式使用该方法:
Type t = entity.GetType(); DoesEntityExist<t>(entityGuid, transaction);
我不断收到以下编译错误:
找不到类型或名称空间名称“ t”(您是否缺少using指令或程序集引用?)
DoesEntityExist<MyType>(entityGuid, transaction);
完美地工作,但我不想每次都使用if指令以单独的类型名称调用该方法。
关于泛型的要点是赋予 编译时 类型安全性-这意味着需要在编译时知道类型。
您 可以 使用仅在执行时才知道的类型 来 调用通用方法,但是必须使用反射:
// For non-public methods, you'll need to specify binding flags too MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });
ck
您是否可以使 调用 方法成为通用方法,并将类型参数作为类型参数传递,从而将决策向上推一层?
如果您可以向我们提供有关您正在做什么的更多信息,那将会有所帮助。有时您可能需要如上所述使用反射,但是如果选择正确的点进行反射,则可以确保只需要执行一次,并让该点以下的所有内容都以常规方式使用type参数。