Cast object to IEnumerable<object>?

后端 未结 2 1817
余生分开走
余生分开走 2021-02-20 08:33

How can I cast an object to IEnumerable?

I know that the object implements IEnumerable but I don\'t kn
相关标签:
2条回答
  • 2021-02-20 09:16

    It's hard to answer this without a concrete use-case, but you may find it sufficient to simply cast to the non-generic IEnumerable interface.

    There are two reasons why this will normally work for most types that are considered "sequences".

    1. The "classic" .NET 1.x collection classes implement IEnumerable.
    2. The generic IEnumerable<T> interface inherits from IEnumerable, so the cast should work fine for the generic collection classes in System.Collections.Generic, LINQ sequences etc.

    EDIT:

    As for why your provided sample doesn't work:

    1. This wouldn't work in C# 3 because it doesn't support generic interface covariance - you can't view an IEnumerable<Derived> as an IEnumerable<Base>.
    2. This wouldn't work in C# 4 either despite the fact that IEnumerable<T> is covariant, since variance is not supported for value-types - the cast from int[] (an IEnumerable<int>) --> IEnumerable<object> can't succeed.
    0 讨论(0)
  • 2021-02-20 09:17

    I ran into the same issue with covariance not supporting value types, I had an object with and actual type of List<Guid> and needed an IEnumerable<object>. A way to generate an IEnumerable when just IEnumerable isn't good enough is to use the linq Cast method

    ((IEnumerable)lhsValue).Cast<object>()
    
    0 讨论(0)
提交回复
热议问题