C# 使用C中已知的TypeObject中的泛型#

C# 使用C中已知的TypeObject中的泛型#,c#,.net,generics,C#,.net,Generics,可能重复: 我有一个泛型方法,我希望它在运行时用一个已知类型的对象调用它 public class someClass { public void someGenericMethod<T>() { //some Code to Execute } public void someMthod() { Type objectType = someInstance.getType(); someGenericMethod<obj

可能重复:

我有一个泛型方法,我希望它在运行时用一个已知类型的对象调用它

public class someClass {
  public void someGenericMethod<T>()
  {
     //some Code to Execute
  }

  public void someMthod()
  {
     Type objectType = someInstance.getType();

     someGenericMethod<objectType>(); //this isn't valid code, but I want to do something like this.
  }
}
公共类someClass{
public void someGenericMethod()
{
//一些要执行的代码
}
公共无效的方法()
{
类型objectType=someInstance.getType();
someGenericMethod();//这不是有效的代码,但我想这样做。
}
}

在C#/.net中有没有办法做到这一点,或者有没有解决办法?

这是可能的,但很难看:

var method = typeof (someClass).GetMethod("someGenericMethod").MakeGenericMethod(objectType);
method.Invoke(this, null);

这是可能的,但很难看:

var method = typeof (someClass).GetMethod("someGenericMethod").MakeGenericMethod(objectType);
method.Invoke(this, null);

您可以使用反射:

var genericMethod = typeof(someClass).GetMethod("someGenericMethod");
var methodInstance = genericMethod.MakeGenericMethod(objectType);
methodInstance.Invoke(someInstance, null);

您可以使用反射:

var genericMethod = typeof(someClass).GetMethod("someGenericMethod");
var methodInstance = genericMethod.MakeGenericMethod(objectType);
methodInstance.Invoke(someInstance, null);

你想完成什么?
someGenericMethod
中还有很多东西需要想象。你需要那个方法是泛型的吗?你能把一个类型作为一个参数传递吗?@George,依我看,只有一种逻辑方法可以解释OP对他的例子的意图。很抱歉重复了。(在我的搜索词中没有找到这个问题)你想实现什么?
someGenericMethod
中还有很多东西需要想象。你需要那个方法是泛型的吗?你能把一个类型作为一个参数传递吗?@George,依我看,只有一种逻辑方法可以解释OP对他的例子的意图。很抱歉重复了。(在我的搜索词中没有发现这个问题)我也不能想象这是对性能友好的,对吗?@Matthew,找到方法的初始反射调用非常慢,但是动态调用应该不会太糟糕(说起来很离奇;实际上还没有量化这些估计)。您可以加快调用部分的速度(如果需要频繁调用)使用Delegate.CreateDelegate(在这种情况下不太难,因为类型参数不用于返回值或任何参数。)如果使用类型参数,则会产生进一步的复杂情况(如果确实希望使用DynamicMethod和Emit,可以解决此问题。)我也无法想象这对性能是友好的,对吗?@Matthew,找到方法的初始反射调用非常慢,但是动态调用应该不会太差(说起来很有趣;实际上没有量化这些估计)。您可以加快调用部分(如果需要频繁调用)通过使用Delegate.CreateDelegate(在本例中不太难,因为类型参数不用于返回值或任何参数。)如果使用类型参数,则会产生进一步的复杂情况(如果确实希望使用DynamicMethod和Emit,可以解决此问题。)