Указание класса шаблона во время выполнения с помощью C # Generics - PullRequest
0 голосов
/ 13 декабря 2011

У нас есть класс, который содержит критерии фильтра, используемые при поиске.В классе есть словарь критериев фильтра, который содержит значение.

Что я хочу сделать, это что-то вроде этого.

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 голосов
/ 13 декабря 2011

Вы должны использовать отражение, чтобы вызвать универсальный объект с параметром типа, неизвестным во время компиляции, например:

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