我需要使用反射调用方法。下面是我需要调用的方法:
public static void DoUpdate(int? operatorId, string name, string desc)
{
// ...do some update work here...
}
我首先需要掌握这个方法的参数,对吧?所以我做了这个代码:
public static object[] GetMethodParms(MethodInfo method, NameValueCollection coll)
{
var parms = method.GetParameters();
// ...do some parse work here...
}
好吧,然后发生了一些我认为很奇怪的事情。如您所见,参数“operatorId”为 Nullable,但 parms[0] 表明它只是一个普通的“System.Int32”。
为什么会发生这种情况,有人能给我解释一下吗?
提前致谢。
编辑#1
我的道歉。我应该澄清这些:
. 我知道我可以通过以下代码检查一个类型是否为 Nullable:
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{ … }
或者,这是另一种方式:
var IsNullable = Nullable.GetUnderlyingType(p.ParameterType) !=null;
. 我不知道为什么 MethodInfo.GetParameter() 会为 Nullable(T) 参数返回一个普通的基础类型。就我而言,“int?operatorId”返回“System.Int32”,我希望它是 Nullable(int)。