在下面的示例中,如果something
的类型为IEnumerable
,我想抛出异常:
var something = new List<int>();
if (something.GetType().IsAssignableFrom(typeof(IEnumerable)))
{
throw new ArgumentOutOfRangeException("Cannot create a key from type IEnumerable");
}
根据我的理解,IsAssignableFrom
应该在上述情况下返回true,因为List<int>
肯定是IEnumerable
。
答案 0 :(得分:5)
您当前的代码会检查您是否可以将IEnumerable
分配给List<int>
,这就是它返回false的原因。
你需要反过来做这件事:
typeof(IEnumerable).IsAssignableFrom(something.GetType())
快速测试:
Console.WriteLine(typeof(IEnumerable).IsAssignableFrom(typeof(List<int>)));
Console.WriteLine(typeof(List<int>).IsAssignableFrom(typeof(IEnumerable)));
打印
True
False
答案 1 :(得分:1)
您可以使用以下方式之一:
if(something.GetType().GetInterfaces().Any(i => i == typeof(IEnumerable)))
throw;
或者
if(something.GetType().IsAssignableTo<IEnumerable>())
throw;
或者
if(typeof(IEnumerable).IsAssignableFrom(something.GetType())
throw;
答案 2 :(得分:1)
试试这个
var something = new List<int>();
if (typeof(IEnumerable).IsAssignableFrom(something.GetType()))
{
throw new ArgumentOutOfRangeException("Cannot create a key from type IEnumerable");
}
答案 3 :(得分:1)
为什么不使用is
运算符?
var something = new List<int>();
if (something is IEnumerable)
{
throw new ArgumentOutOfRangeException("Cannot create a key from type IEnumerable");
}