В C # как я могу проверить, если T имеет тип IInterface и привести к этому, если мой объект поддерживает этот интерфейс?
В C # у меня есть функция, которая проходит вT
с помощьюgenerics
и я хочу запустить проверку, чтобы увидеть, еслиT
являетсяobject
который реализуетinterface
и если так, позвоните одному изmethods
на томinterface
.
Я не хочу иметьT
ограничения должны быть только этого типа. Можно ли это сделать?
Например:
public class MyModel<T> : IModel<T> where T : MyObjectBase
{
public IQueryable<T> GetRecords()
{
var entities = Repository.Query<T>();
if (typeof(IFilterable).IsAssignableFrom(typeof(T)))
{
//Filterme is a method that takes in IEnumerable<IFilterable>
entities = FilterMe(entities));
}
return entities;
}
public IEnumerable<TResult> FilterMe<TResult>(IEnumerable<TResult> linked) where TResult : IFilterable
{
var dict = GetDict();
return linked.Where(r => dict.ContainsKey(r.Id));
}
}
Ошибка, которую я получаю:
Ошибка 21 Тип «TResult» нельзя использовать в качестве параметра типа «TResult» в универсальном типе или методе «FilterMe (System.Collections.Generic.IEnumerable)». Не существует неявного преобразования ссылок из «TResult» в «IFilterable».