我IEnumerable<object>输入变量.
IEnumerable<object> items= new object[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
什么是检查它的最佳方法IEnumerable<int>?
我试过了
typeof(IEnumerable<int>).IsAssignableFrom(items.GetType())
typeof(IEnumerable<int>).IsInstanceOfType(items)
items is IEnumerable<int>
Run Code Online (Sandbox Code Playgroud)
但是,Re-Sharper抱怨他们.
就我而言,在大多数情况下IEnumerable<object> items是类型的.我希望在类型和其他类型的东西时执行某些操作.IEnumerable<int>IEnumerable<int>
Yuv*_*kov 12
如果要检查是否IEnumerable<object>只包含整数,可以使用Enumerable.All:
var isInts = items.All(x => x is int);
Run Code Online (Sandbox Code Playgroud)
因为Valuetypes不支持co或contravariance.
IEnumerable<object>不能成为IEnumerable<int>- 你自己证明了,因为你必须使用一个演员来制作你的IEnumerable<object>,这实际上包装了所有的int值.因此,R#正确报告了可疑的类型检查,因为它源于您的操作,您的检查将始终返回false.
所以最后你需要在使用强制转换之前单独检查每个元素是否为int,否则你将遇到异常.