我正在寻找一种方法来通过反射过滤掉具有 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/