如何使用类型列表作为通用参数?

时间:2017-09-06 20:53:48

标签: c# list generics

我有许多类型都实现了简单的界面。

我希望能够获得类型列表,然后在通用方法中使用它们

public T GetByID<T>(BaseAPI api) where T: class
{
    ....
    try
    {
        var response = (HttpWebResponse)httpRequest.GetResponse();
        var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

        T returnObject = JsonConvert.DeserializeObject<T>(responseString);
        return returnObject;
    }
    catch (Exception ex)
    {
        return default(T);
    }
}

而不是必须维护

列表
IF INSERTING OR UPDATING THEN
  v_value := :new.column2;
ELSE
  v_value := :old.column2;
END IF;

...

SELECT field INTO my_var FROM my_table WHERE column1 = v_value;

1 个答案:

答案 0 :(得分:1)

我真的没有看到你为什么这么做的实际原因(可能是一个较大问题的一小部分?),但这是可能的(见下文)。如果您有更具体的问题,可以尝试更新您的问题。

        DoThing doThing = new DoThing();

        //loop through types which are IFoo
        foreach (var type in AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(p => typeof(IFoo).IsAssignableFrom(p) && p.IsClass))
        {
            //call DoThing.Doit<t> method using reflection
            MethodInfo method = typeof(DoThing).GetMethod("Doit");
            MethodInfo generic = method.MakeGenericMethod(type);
            generic.Invoke(doThing, null);
        }

请注意,上面的代码假设已定义DoThing:

public class DoThing
{
    public void Doit<T>() where T : IFoo
    {
    }
}