如何确定对象是否为IEnumerable类型
代码:
namespace NS {
class Program {
static IEnumerable<int> GetInts() {
yield return 1;
}
static void Main() {
var i = GetInts();
var type = i.GetType();
Console.WriteLine(type.ToString());
}
}
}
输出:
NS.1.Program+<GetInts>d__0
如果我将GetInts更改为返回IList,则一切正常,输出为:
System.Collections.Generic.List`1[System.Int32]
这将返回false:
namespace NS {
class Program {
static IEnumerable<int> GetInts() {
yield return 1;
}
static void Main() {
var i = GetInts();
var type = i.GetType();
Console.WriteLine(type.Equals(typeof(IEnumerable<int>)));
}
}
}
发布于 2016-04-11 22:58:57
因为IEnumerable继承了IEnumerable (非泛型),如果你不需要知道什么时候一个类型是IEnumerable而不是IEnumerable,那么你可以使用:
if (typeof(IEnumerable).IsAssignableFrom(srcType))
发布于 2009-12-04 21:27:20
与Marc的答案相同的技术,但Linqier:
namespace NS
{
class Program
{
static IEnumerable<int> GetInts()
{
yield return 1;
}
static void Main()
{
var i = GetInts();
var type = i.GetType();
var isEnumerableOfT = type.GetInterfaces()
.Any(ti => ti.IsGenericType
&& ti.GetGenericTypeDefinition() == typeof(IEnumerable<>));
Console.WriteLine(isEnumerableOfT);
}
}
}
发布于 2009-12-04 20:37:33
您可以使用is
关键字。
[TestFixture]
class Program
{
static IEnumerable<int> GetInts()
{
yield return 1;
}
[Test]
static void Maasd()
{
var i = GetInts();
Assert.IsTrue(i is IEnumerable<int>);
}
}
https://stackoverflow.com/questions/1846671
复制相似问题