检查FieldInfo类型是否为不带类型的泛型类

本文关键字:类型 泛型类 FieldInfo 是否 检查 | 更新日期: 2023-09-27 18:26:22

我有一个泛型类(ClassName<T>),对于具有不同T的字段(Class<bool>Class<int>等),我有几个FieldInfo。如何检查FieldInfo的类型是否只是ClassName,而不是ClassName<bool>ClassName<int>?这是我的代码:

public class Field<T>
{
    public T value;
    public Field(T value)
    {
        this.value = value;
    }
}
...
public class Action_SetPosition : Action
{
    public Field<GameObject> gameObject = new Field<GameObject>(null);
    public Field<Vector3> position = new Field<Vector3>(Vector3.zero);
}
...
FieldInfo[] fields = typeof(Action_SetPosition).GetFields();
for (int a = 0; a < fields.Length; a++)
{
    if (fields[a].FieldType == typeof(Field<ANYTHING>))
    {
    }
}

我想检查一下fields[a]的类型中是否有Field,以及ANY<T>。谢谢。:)

检查FieldInfo类型是否为不带类型的泛型类

我想检查一下字段的类型[a]中有Field和ANY。谢谢。:)

我不太确定我是否理解这个说法,但我认为你正在寻找这样的东西:

if(fields[a].IsGenericType && 
   fields[a].FieldType.GetGenericTypeDefinition() == typeof(Field<>))

如果字段类型为Field<T>,则无论T的类型如何,都将返回true。。。

一种方法是使用反射

但如果你不缓存,它就有点丑陋和不完美。

一个更简单的方法是使用接口

你可以试试这个

public interface IField {}
public class Field<T> : IField
{
    public T value;
    public Field(T value)
    {
        this.value = value;
    }
}
// ...

FieldInfo[] fields = typeof(Action_SetPosition).GetFields();
for (int a = 0; a < fields.Length; a++)
{
    if (fields[a] is IField)
    {
        // ...
    }
}