unsafe
リフレクションを介して修飾子を持つメソッドを除外する方法を探しています。メソッド属性ではないようです。
方法はありますか?
編集:この情報はメタデータにないようです。少なくとも、IL には表示されません。ただし、リフレクターはunsafe
C# ビューで修飾子を表示します。それがどのように行われたかについてのアイデアはありますか?
EDIT 2:私のニーズのために、メソッドのパラメーターの1つがポインターである場合、または戻り値の型がポインターである場合、メソッドは安全ではないことを前提としたチェックになりました。
public static bool IsUnsafe(this MethodInfo methodInfo)
{
if (HasUnsafeParameters(methodInfo))
{
return true;
}
return methodInfo.ReturnType.IsPointer;
}
private static bool HasUnsafeParameters(MethodBase methodBase)
{
var parameters = methodBase.GetParameters();
bool hasUnsafe = parameters.Any(p => p.ParameterType.IsPointer);
return hasUnsafe;
}
もちろん、これは安全でないブロックがメソッド内で実行される状況を処理しませんが、繰り返しになりますが、私が関心を持っているのはメソッド シグネチャだけです。
ありがとう!