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;
}