List <int>可从IEnumerable分配吗?

Dav*_*New 0 .net c# types

在下面的示例中,如果something类型为,我想抛出一个异常IEnumerable

var something = new List<int>();

if (something.GetType().IsAssignableFrom(typeof(IEnumerable)))
{
    throw new ArgumentOutOfRangeException("Cannot create a key from type IEnumerable");
}
Run Code Online (Sandbox Code Playgroud)

据我了解,IsAssignableFrom在上述情况下应该返回true,因为List<int>肯定是一个IEnumerable

Mar*_*zek 5

您当前的代码检查是否可以分配IEnumerableList<int>,这就是为什么它返回false的原因。

您需要采用另一种方法:

typeof(IEnumerable).IsAssignableFrom(something.GetType())
Run Code Online (Sandbox Code Playgroud)

快速测试:

Console.WriteLine(typeof(IEnumerable).IsAssignableFrom(typeof(List<int>)));
Console.WriteLine(typeof(List<int>).IsAssignableFrom(typeof(IEnumerable)));
Run Code Online (Sandbox Code Playgroud)

版画

True
False
Run Code Online (Sandbox Code Playgroud)