В С# у меня есть функция, которая проходит через 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".