我试图通过动态对象调用公共TryParse方法,但是我遇到了RuntimeBinderException ...“ System.Reflection.TypeInfo不包含TryParse的定义”。运行时动态对象的类型为System.Boolean,并且此类定义了该公共方法。
注意。这样做的原因是创建带有附加错误检查的通用TryParse方法,该方法将在应用程序中重复使用。
以下是重现该问题的代码:
private (bool Success, T Value) TryParse<T>(string strval)
{
(bool Success, T Value) retval;
dynamic dtype = typeof(T);
retval.Success = dtype.TryParse(strval, out retval.Value);
return retval;
}
就我而言,我正在使用TryParse(“ true”)测试该方法。 我究竟做错了什么? 谢谢。
答案 0 :(得分:0)
Bool.TryParse
是静态方法。 Bool
和typeof(Bool)
是不同的东西。 typeof(Bool)
返回一个System.Reflection.TypeInfo
(从System.Type
继承)对象,该对象具有有关布尔类型的元数据,并且没有方法调用TryParse
。
您可以使用反射从类型对象获取TryParse
方法
Type tType = typeof(T);
object[] args = { "true", false };
MethodInfo tryParseMethodInfo = tType.GetMethod("TryParse", BindingFlags.Static | BindingFlags.Public);
bool result = (bool)tryParseMethodInfo.Invoke(null, args);
但是使用System.Convert
可能会更好。您还可以查看使用here