检查FieldInfo类型是否是没有类型的泛型类

时间:2014-10-12 02:00:53

标签: c# .net class types field

我有一个通用类(ClassName<T>),我有几个FieldInfo用于具有不同T s(Class<bool>Class<int>的字段等等...)。如何检查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>。谢谢。 :)

2 个答案:

答案 0 :(得分:3)

  

我想检查字段的类型[a]中有字段,还有任何字段。谢谢。 :)

我不太确定我理解这个陈述,但我认为你正在寻找这样的事情:

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

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

答案 1 :(得分:0)

一种方法是反思。

但如果你不缓存,那就有点难看了。

更简单的方法是使用界面

你可以试试这个

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)
    {
        // ...
    }
}