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

标签 c# reflection unsafe

我正在寻找一种方法来通过反射过滤掉具有 unsafe 修饰符的方法。好像不是方法属性。

有办法吗?

编辑: 似乎此信息不在元数据中,至少我在 IL 中看不到它。然而,反射器在 C# View 中显示了 unsafe 修饰符。关于如何完成的任何想法?

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

当然,这不处理在方法内执行不安全 block 的情况,但同样,我只对方法签名感兴趣。

谢谢!

最佳答案

不幸的是,unsafe 关键字只是将方法的主体包装在一个不安全的 block 中,并且不会发出反射会看到的任何内容。唯一可以确定的方法就是拆解方法,看看里面有没有不安全的操作。

关于c# - 通过反射确定方法是否不安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3044526/

相关文章:

c# - C、C++、Java、C# 中的 main()

c# - 使用 Lambda 表达式将数据传递给线程

c# - 反射(reflection):如何创建一个精确过滤的程序集类型列表?

c# - 检查附加对象是否有任何基于导航属性的相关数据库

c# - 不安全的性能 C#,删除 long 转换为 int 以访问数组索引

c# - 如何在安全上下文中使用不安全代码?

c# - JSON.NET如何删除节点

c# - Fody PropertyChanged 不会触发另一个属性

c# - 传递属性并上课

c# - 如何在 "visual studio code"中运行不安全代码?