如何确定 ConstructorInfo 对象是否具有非托管参数



我的应用程序使用反射来分析运行时中的 c++/cli 代码。
我需要确定一个类型是否具有没有非托管参数(指针等)的构造函数,因为我想稍后使用:

ConstructorInfo constructorInfo;  
// ...  
var ret = constructorInfo.Invoke(BindingFlags..., null, myParameters, null);  

如果构造函数具有指向非托管对象的指针作为参数,则当我向其传递 null 时会出现强制转换异常。

那么我该如何确定呢? 没有托管...在这种情况下,IsPointer 无济于事。

目前尚不清楚您的问题实际上是什么,但这里有一个简短的演示程序,它显示了将null传递给构造函数,该构造函数将指针作为参数并使用IsPointer检测它:

using System;
using System.Reflection;
namespace pointers
{
    unsafe class Program
    {
        public Program(int* x)
        {
            Console.WriteLine("It worked!");
        }
        static void Main(string[] args)
        {
            ConstructorInfo[] c = typeof(Program).GetConstructors();
            c[0].Invoke(BindingFlags.Default, null, new object[] { null }, null);
            Console.WriteLine(c[0].GetParameters()[0].ParameterType.IsPointer);
        }
    }
}

它打印:

成功了!真

尝试测试参数是否为值类型。 null 不是任何值类型的有效值,无论是非托管指针还是简单的 int

相关内容

  • 没有找到相关文章

最新更新