GenericInt が Generic<T> を継承しているか確認するために、BaseType を見てみたところ
Generic1[System.Int32]` と表示され意図したクラスが取得できなかった
public abstract class Generic<T>{} public class GenericInt : Generic<int>{} private void Main() { var instance = new GenericInt(); var type = instance.GetType(); Debug.Log(type.BaseType == typeof(Generic<>)); // false Debug.Log(type.BaseType); // Generic`1[System.Int32] }
調べたところ、Generic クラス取得するには GetGenericTypeDefinition を利用する必要があった
そのため、先程の処理を下記のように書き換えると正しく Generic クラスの比較が行えた
private void Main() { var instance = new GenericInt(); var type = instance.GetType(); var genericType = type.BaseType.GetGenericTypeDefinition(); Debug.Log(genericType == typeof(Generic<>)); Debug.LogWarning(genericType); // Generic`1[T] }