C# 动态对象调用公共静态方法TryParse的RuntimeBinderException

C# 动态对象调用公共静态方法TryParse的RuntimeBinderException,c#,C#,我试图通过一个动态对象调用公共的TryParse方法,但是我得到了一个RuntimeBinderException。。。“System.Reflection.TypeInfo不包含TryParse的定义”。运行时的动态对象具有System.Boolean类型,该类定义了该公共方法 注意。这样做的原因是创建一个通用的TryParse方法,该方法带有额外的错误检查,将在应用程序中重复使用 下面是重现问题的代码: private (bool Success, T Value) TryParse

我试图通过一个动态对象调用公共的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;
    }
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+特定于应用程序的错误检查。