Em C # como eu posso verificar se T é do tipo IIinterface e lançar para que, se meu objeto suporta essa interface?
Em C #, tenho uma função que passa emT
usandogenerics
e eu quero passar um cheque para ver seT
é umobject
que implementa uminterface
e se assim for, chame um dosmethods
naquilointerface
.
Eu não quero terT
restrições para apenas ser desse tipo. É possível fazer isso?
Por exemplo:
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));
}
}
O erro que estou recebendo é:
Erro 21 O tipo 'TResult' não pode ser usado como parâmetro de tipo 'TResult' no tipo genérico ou método 'FilterMe (System.Collections.Generic.IEnumerable)'. Não há conversão de referência implícita de 'TResult' para 'IFilterable'.