質問: typeof(IEquatable<>).MakeGenericType(typeParam); ``` ### 例外メッセージ ``` System.TypeLoadException: 'The generic type 'System.IEquatable`1' was used with an invalid instantiation in assembly 'System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.' ``` ### 環境 .NET Core 3.1 および .NET Framework 4.8
回答: 仕様と思われる。 下記のコードはC#ではコンパイルエラー(CS0306)になる。 ``` class C : IEquatable { public bool Equals(ArgIterator other) => throw new NotImplementedException(); } ``` ref-like型構造体は、ジェネリック型引数にできないという制約がある。 .NET Coreでは、`MakeGenericType`の引数に渡す前に`Type.IsByRefLike`プロパティを調べ、`true`の場合は`MakeGenericType`を呼び出さないようにすることで回避可能である。 .NET Frameworkでは`Type.IsByRefLike`が無いため、個々の型を弾くか、`try-catch`でスキップする必要があると思われる。