In C# how can i check if T is of type IInterface and cast to that if my object supports that interface?

前端 未结 8 1340
粉色の甜心
粉色の甜心 2021-02-05 10:52

In C#, I have a function that passes in T using generics and I want to run a check to see if T is an object that implements a

8条回答
  •  心在旅途
    2021-02-05 11:49

    public IEnumerable FilterMe(IEnumerable linked) where TResult : IFilterable
    {
        var dict = GetDict();
        return linked.Where(r => dict.ContainsKey(r.Id));
    }
    

    Try replacing FilterMe with this version:

    public IEnumerable FilterMe(IEnumerable linked)
    {
        var dict = GetDict();
        return linked.Where(r => dict.ContainsKey(r.Id)).Cast();
    }
    

    Then, were you call, change your code to this:

    if (typeof(IFilterable).IsAssignableFrom(typeof(T)))
    {
        //Filterme is a method that takes in IEnumerable
        var filterable = entities.Cast();
        entities = FilterMe(entities).AsQueryable();
    }
    

提交回复
热议问题