如何动态调用TryParse?有没有办法动态调用TryParse?一些:publicstaticboolTryParse(stringtoConvert,outTresult)当然可以使用Typeonverters。但是,无效的转换会导致异常,我想摆脱它。您可以使用反射动态调用TryParse方法。这样,如果转换失败,您就不会得到耗时的异常。此方法是此方法的略微优化版本。//尝试使用反射解析publicstaticboolTryConvertValue(stringstringValue,outTconvertedValue){vartargetType=typeof(T);如果(targetType==typeof(string)){convertedValue=(T)Convert.ChangeType(stringValue,typeof(T));返回真;}varnullableType=targetType.IsGenericType&&targetType.GetGenericTypeDefinition()==typeof(Nullable);如果(nullableType){如果(string.IsNullOrEmpty(stringValue)){convertedValue=default(T);返回真;}targetType=newNullableConverter(targetType).UnderlyingType;}Type[]argTypes={typeof(string),targetType.MakeByRefType()};vartryParseMethodInfo=targetType.GetMethod("TryParse",argTypes);if(tryParseMethodInfo==null){convertedValue=default(T);返回假;}object[]args={stringValue,null};varsuccessfulParse=(bool)tryParseMethodInfo.Invoke(null,args);如果(!successfulParse){convertedValue=default(T);返回假;}convertedValue=(T)args[1];返回真的;你可以这样写:publicdelegateboolTryParser(stringinput,outTresult);publicstaticboolTryParse(stringtoConvert,outTresult,TryParsertryParser=null){if(toConvert==null)thrownewArgumentNullException("toConvert");}//这整个块仅在您确实需要//它以真正动态的方式工作时才使用。您还可以考虑//在每种类型的基础上记忆默认的try-parser。if(tryParser==null){varmethod=typeof(T).GetMethod("TryParse",new[]{typeof(string),typeof(T).MakeByRefType()});if(method==null)thrownewInvalidOperationException("Typedoesnothaveabuiltintry-parser.");tryParser=(TryParser)Delegate.CreateDelegate(typeof(TryParser),方法);}返回tryParser(toConvert,输出结果);}然后调用:intresult;boolsuccess=TryParse("123",输出结果);我真的不会推荐这个,除非你有一些需要它的场景以上就是C#学习教程:如何动态调用TryParse?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
