c#:方法需要类型

时间:2011-06-01 15:05:33

标签: c#

class Country
{
   //props
}

dataContext是一个带有方法Set()的变量,它的工作原理如下

dataContext.Set<Country>().SomeThing(); 

但我不想硬编码 type = Country ,而是我想从变量中提取类型,例如

function MyFunction(object o)
{
   dataContext.Set</*something_here*/>().SomeThing();
   //some how extract type from variable o
}

2 个答案:

答案 0 :(得分:10)

怎么样:

void MyFunction<T> (T o)
{
    dataContext.Set<T> ().SomeThing ();
}

然后用:

调用它
MyFunction<County> (county_object);

答案 1 :(得分:3)

除了其他答案,你可以用一些反思技巧来做到这一点。基本上,它会像这样沸腾:

  1. 找到set方法的MethodInfo对象。
  2. 带有MakeGenericType的MethodInfo上的
  3. o.GetType()
  4. 调用该方法,然后调用SomeThing方法。
  5. 尝试在内存中对此进行编码,请原谅任何代码错误:

     var setMethod = dataContext.GetType().GetMethods().First(x => x.Name == "Set");
    
     var genericVersion = setMethod.MakeGenericType(o.GetType());
    
     var result = genericVersion.Invoke(dataContext, null) as WhateverSetReturns;
    
     result.SomeThing();