使用C#Generics在运行时指定模板类

时间:2011-12-13 16:39:36

标签: .net-3.5 c#-3.0

我们有一个类用于包含搜索中使用的过滤条件。在类中是过滤条件的字典,其中包含值。

我想做的就是这样。

protected string GetSearchValue(string name)
{
    if (!FilterCache.HasFilter(name)) return string.Empty;

    var filterType = FilterCache.GetFilterType(name);

    var filter = FilterCache.GetFilter<filterType>(name); // <- This fails

    if (filter == null || !filter.IsSet) return string.Empty;

    return filter.Value.ToString();         
}

GetFilterType如下所示:

    public Type GetFilterType(string name)
    {
        return SearchElements[name].GetType();
    }

最后,我想得到过滤器的值并将其返回给用户界面。

1 个答案:

答案 0 :(得分:0)

您需要使用反射来调用具有在编译时未知的type参数的泛型,如下所示:

var getFilterGeneric = typeof(FilterCache)
    .GetMethod("GetFilter")
    .MakeGenericMethod(filterType)
    .Invoke(typeof(FilterCache) /* or null */, name);