我有一个方法,接受类型为System.Object的参数obj。
现在我想检查obj的实际类型是否为:
- 集合类型(IEnumerable)。
- 其他任何类型。
我想到的第一种方法是:
if (obj is IEnumerable)
// obj is a collection
但是 System.String 实现了 IEnumerable 接口,我不想把字符串视为集合。
我想到的第二种方法是测试 ICollection 而不是 IEnumerable,因为 IEnumerable 更多的是潜在的集合而不是实际的集合。这将排除字符串,但也会排除不继承 ICollection 的 ICollection-Of-T,因为 IEnumerable-Of-T 是唯一向后兼容的泛型集合抽象 - 它继承自 IEnumerable。
所以我想最好的方法是:
if (obj is string)
// not a collection
else if (obj is IEnumerable)
// collection
else
// not a collection
有更好的方法吗?