Может кто-нибудь объяснить это?Согласно документации IsGenericType
указывает, представляет ли текущий тип параметр типа в определении универсального типа или метода.
Итак, это (LINQPad) код:
bool bStraight = typeof(Task).IsGenericType;
bStraight.Dump("typeof(Task).IsGenericType");
работает как положено и выдает результат:
typeof (Task) .IsGenericType
False
Но когдаЯ извлекаю его из метода с помощью отражения:
public class MyClass
{
public async Task Method()
{
await Task.Run(() =>
{
Thread.Sleep(3000);
});
}
}
public async Task TEST()
{
MyClass theObject = new MyClass();
Task task = (Task)typeof(MyClass).GetTypeInfo()
.GetDeclaredMethod("Method")
.Invoke(theObject, null);
bool b = task.GetType().IsGenericType;
bool b2 = task.GetType().GetGenericTypeDefinition() == typeof(Task<>);
b.Dump("IsGenericType");
b2.Dump("GetGenericTypeDefinition");
bool bStraight = typeof(Task).IsGenericType;
bStraight.Dump("typeof(Task).IsGenericType");
}
Я получаю неожиданный вывод:
IsGenericType
True
GetGenericTypeDefinition
True