通过反射确定方法是否不安全

Iga*_*nik 8 c# reflection unsafe

我正在寻找一种方法来过滤出unsafe通过反射具有修饰符的方法.它似乎不是方法属性.

有办法吗?

编辑:似乎这个信息不在元数据中,至少我在IL中看不到它.但是反射unsafe器在C#视图中显示修改器.关于它是如何完成的任何想法?

编辑2:根据我的需要,我最终得到了一个检查,假设如果方法的某个参数是指针,或者返回类型是指针,那么该方法是不安全的.

    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;
    }
Run Code Online (Sandbox Code Playgroud)

当然,这不会处理在方法中执行不安全块的情况,但同样,我感兴趣的是方法签名.

谢谢!

Ada*_*uth 5

不幸的是,关键字unsafe只是将方法的主体包装在一个不安全的块中,并且不会发出任何反射会看到的内容。唯一可以确定的方法是反汇编该方法,然后查看内部是否存在任何不安全的操作。