C# 动态对象调用公共静态方法TryParse的RuntimeBinderException
我试图通过一个动态对象调用公共的TryParse方法,但是我得到了一个RuntimeBinderException。。。“System.Reflection.TypeInfo不包含TryParse的定义”。运行时的动态对象具有System.Boolean类型,该类定义了该公共方法 注意。这样做的原因是创建一个通用的TryParse方法,该方法带有额外的错误检查,将在应用程序中重复使用 下面是重现问题的代码:C# 动态对象调用公共静态方法TryParse的RuntimeBinderException,c#,C#,我试图通过一个动态对象调用公共的TryParse方法,但是我得到了一个RuntimeBinderException。。。“System.Reflection.TypeInfo不包含TryParse的定义”。运行时的动态对象具有System.Boolean类型,该类定义了该公共方法 注意。这样做的原因是创建一个通用的TryParse方法,该方法带有额外的错误检查,将在应用程序中重复使用 下面是重现问题的代码: private (bool Success, T Value) 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;
}
private(bool Success,T值)TryParse(字符串strval)
{
(bool Success,T值)retval;
动态数据类型=类型(T);
retval.Success=dtype.TryParse(strval,out retval.Value);
返回返回;
}
在我的例子中,我正在用TryParse(“true”)测试该方法。
我做错了什么?
谢谢。Bool.TryParse是一种静态方法
Bool
和typeof(Bool)
不是一回事typeof(Bool)
返回一个System.Reflection.TypeInfo
(继承自System.Type
)对象,该对象包含有关布尔类型的元数据,并且没有方法调用TryParse
可以使用反射从type对象获取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
。您还可以看看使用所描述的方法我试图避免反射。思维(显然是错误的)动态可能是一种可能的方式。倾向于在您提供的链接上使用Charlie Brown的答案,以便使用一个通用函数来完成TryParse+特定于应用程序的错误检查。