我的应用程序使用反射来分析运行时的c ++ / cli代码 我需要确定一个类型是否有一个没有非托管参数的构造函数(指针等),因为我想稍后使用:
ConstructorInfo constructorInfo;
// ...
var ret = constructorInfo.Invoke(BindingFlags..., null, myParameters, null);
如果构造函数有一个指向非托管对象的指针作为参数,当我向它传递null时会有一个转换异常。
所以我如何确定?没有IsManaged ......在这种情况下IsPointer没有用。
答案 0 :(得分:2)
目前尚不清楚你的问题究竟是什么,但这是一个简短的演示程序,它显示将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);
}
}
}
打印:
It worked! True
答案 1 :(得分:-1)
尝试测试参数是否为值类型。 null
不是任何值类型的有效值,无论是非托管指针还是int
。