簡體   English   中英

檢查FieldInfo類型是否是沒有類型的泛型類

[英]Check if FieldInfo type is generic class without type

我有一個通用類( ClassName<T> ),我有幾個FieldInfo用於具有不同T的字段( 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]類型fields[a]Field ,以及ANY <T> 謝謝。 :)

我想檢查一下它的字段類型[a]里面有Field,還有ANY。 謝謝。 :)

我不太確定我能理解這一說法,但我認為您正在尋找這樣的東西:

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

這將返回true ,如果字段的類型是Field<T>不管類型的T ...

一種方法是反射。

但是,如果您不緩存,那將是丑陋且不完善的。

一個簡單的方法是使用界面

你可以試試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM