Используя FieldInfo для поля, вы можете проверить свойство IsGenericType свойства FieldType, если хотите узнать, является ли поле универсальным типом само по себе.
var info = type.GetField("myField",BindingFlags.Private);
if (info != null)
{
if (info.FieldType.IsGenericType)
{
Console.WriteLine( "The type of the field is generic" );
}
}
Если вам нужно проверить, еслиполе относится к типу универсального в определении универсального класса, тогда вместо этого вы захотите проверить IsGenericParameter.
var info = type.GetField("myField",BindingFlags.Private);
if (info != null)
{
if (info.FieldType.IsGenericParameter)
{
Console.WriteLine( "The type of the field is the generic parameter of the class" );
}
}
Вы, конечно, можете объединить их.Проверка, является ли поле универсальным типом в определенном в общем классе, является более проблематичным, но все же может быть выполнено.Вы просто должны проверить параметры типа универсального типа, чтобы увидеть, есть ли у одного из них установлен IsGenericParameter.Обратите внимание, что следующий пример имеет глубину только один уровень;если вы хотите что-то всеобъемлющее, вам нужно определить метод и использовать его рекурсивно.
var info = type.GetField("myField",BindingFlags.Private);
if (info != null)
{
if (info.FieldType.IsGenericType)
{
foreach (var subType in info.FieldType.GetGenericArguments())
{
if (subType.IsGenericParameter)
{
Console.WriteLine( "The type of the field is generic" );
}
}
}
}