Resharper. Это - лучший инструмент для повышения производительности для любого разработчика программного обеспечения! TestDriven. Сеть довольно хороша также. и GhostDoc.
Если вы имеете в виду коллекцию , то просто как
:
var asEnumerable = i as IEnumerable<int>;
if(asEnumerable != null) { ... }
Однако я m при условии (из примера), что у вас есть Тип
:
Объект никогда не будет иметь тип IEnumerable
- но он может реализовать его; Я ожидал, что:
if(typeof(IEnumerable<int>).IsAssignableFrom(type)) {...}
подойдет. Если вы не знаете T
( int
в приведенном выше), то проверьте все реализованные интерфейсы:
static Type GetEnumerableType(Type type) {
foreach (Type intType in type.GetInterfaces()) {
if (intType.IsGenericType
&& intType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) {
return intType.GetGenericArguments()[0];
}
}
return null;
}
и вызовите:
Type t = GetEnumerableType(type);
, если это значение null, это не 't IEnumerable
для любого T
- в противном случае проверьте t
.
Тот же метод, что и в ответе Марка, но 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);
}
}
}
Как определить, относится ли объект к типу IEnumerable
?
Пожалуйста, не стесняйтесь использовать этот прекрасный, сверхмалый, универсальный метод расширения, чтобы определить, реализует ли какой-либо объект интерфейс IEnumerable. Он расширяет тип Object , поэтому вы можете выполнить его, используя любой экземпляр любого объекта, который вы используете.
public static class CollectionTestClass
{
public static Boolean IsEnumerable<T>(this Object testedObject)
{
return (testedObject is IEnumerable<T>);
}
}
i
имеет тип NS.1.Program +
, который является подтипом из IEnumerable
. Таким образом, вы можете использовать либо
if (i is IEnumerable<int>) { ... }
, либо IsAssignableFrom
(как в ответе Марка).
Вы можете использовать ключевое слово is
.
[TestFixture]
class Program
{
static IEnumerable<int> GetInts()
{
yield return 1;
}
[Test]
static void Maasd()
{
var i = GetInts();
Assert.IsTrue(i is IEnumerable<int>);
}
}
Как определить, является ли тип другим универсальным типом , должно помочь вам в этом.