JetBrains Rider 2026.1 Help

コードインスペクション:マネージドメソッドへのアクセスはサポートされていません

このインスペクションは、 バーストコンパイラー(英語)によってコンパイルされたコンテキスト内で、管理対象メソッド (通常は System.Object または System.ValueType に属するメソッド) への呼び出しを識別します。 Burst は、C# の高性能かつ限定されたサブセットを対象としているため、ボクシング、参照型、その他の管理対象動作を伴うほとんどのメソッドはサポートしていません。

仕組み

アナライザーは、Burst でコンパイルされたコード内のメソッド呼び出し(IInvocationExpression )を監視します。 呼び出しが禁止されているかどうかは、以下のルールに基づいて判断します。

  • 禁止事項: System.ObjectToStringGetTypeEquals など)または System.ValueType に直接属するメソッドは、ボックス化を必要とする場合や、管理対象ヒープとやり取りする場合が多いため、一般的に禁止されています。

  • 例外 (GetHashCode): 構造体内で GetHashCode を呼び出すことは、ボクシングが発生しない場合に限り許可されます。 base.GetHashCode() をオーバーライドする構造体内で呼び出した場合、マネージド実装に到達すると依然として問題が発生します。

  • オーバーライド: 構造体が Equals(object) のようなメソッドをオーバーライドしている場合、 object パラメーター自体がボクシングを強制するため、Burst 内でそのメソッドを呼び出すことは禁止されています。

このインスペクションは、コードが [BurstCompile] 属性でマークされたメソッドまたはジョブ内にある場合にのみトリガーされます。

サンプル

この例では、Burst コンパイルされたジョブ内で、整数に対して ToString() メソッドと GetType() メソッドが呼び出されています。 これらの呼び出しはサポートされていないため、エラーとして検出されます。

using Unity.Burst; using Unity.Jobs; using UnityEngine; [BurstCompile] public struct MyJob : IJob { public int value; public void Execute() { // Reported: Accessing a managed method 'ToString' is not supported string s = value.ToString(); // Reported: Accessing a managed method 'GetType' is not supported var type = GetType(); } }
using Unity.Burst; using Unity.Jobs; [BurstCompile] public struct MyJob : IJob { public int value; public void Execute() { // Avoid managed methods; perform operations using blittable types int result = value * 2; } }
2026 年 6 月 12 日