C# で Type.GetType(string)の戻り値がnullになる場合の対処方法

C# で Type.GetType(string)の戻り値がnullになる場合の対処方法

例えば以下のようにType.GetTypeを使用していても何故かnullが返ってきてしまうときがある。
もちろんクラスが存在しないから、などという落ちではない。
そのような状況に陥ったときの解決方法について解説する。

Type objType = obj.GetType();
string typeFullName = objType.FullName;
// 蛇足だが、AssemblyQualifiedNameとは
// アセンブリの名前を含む型のアセンブリ修飾名である。
string assemblyQualifiedName = objType.AssemblyQualifiedName;


// 何故か以下の2つの文はどちらもnullが返ってくる。
Type type1 = Type.GetType(typeFullName);
Type type2 = Type.GetType(assemblyQualifiedName)
前提環境
  • Windows 10
  • Visual Studio Professional 2019
  • .NET Framework 4.2
  • C#

コードのポイント

以下のようなメソッドを作成し、参照済みのAssamblyから一致したものを取得すればよい。
上記がnullで、これだと大丈夫なのは謎だが、うん、よくわからん。

public static Type GetTypeByAssemblyQualifiedName(string assemblyQualifiedName)
{
    foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
    {
        foreach (Type type in assembly.GetTypes())
        {
            if (type.AssemblyQualifiedName == assemblyQualifiedName)
            {
                return type;
            }
        }
    }
    return null;
}

コメントする

CAPTCHA