В C # как я могу проверить, если T имеет тип IInterface и привести к этому, если мой объект поддерживает этот интерфейс?
В C # у меня есть функция, которая проходит вT
с помощьюgenerics
и я хочу запустить проверку, чтобы увидеть, еслиT
являетсяobject
который реализуетinterface
и если так, позвоните одному изmethods
на что .interface
Я нене хочу иметьT
ограничения должны быть только этого типа. Можно ли сделать это?
Например:
public class MyModel : IModel where T : MyObjectBase
{
public IQueryable GetRecords()
{
var entities = Repository.Query();
if (typeof(IFilterable).IsAssignableFrom(typeof(T)))
{
//Filterme is a method that takes in IEnumerable
entities = FilterMe(entities));
}
return entities;
}
public IEnumerable FilterMe(IEnumerable 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.