page contents

C#中TryParse()的通用包装器

本文讲述了C#中TryParse()的通用包装器!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-06-2mXSdycj62ad305b2717a.png

本文讲述了C#中TryParse()的通用包装器!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

我正在使用以下方法提供对各种Type类的TryParse()方法的快速内联访问.基本上我希望能够解析来自Web服务的字符串(如果可能),否则返回默认值. private Int64 Int64Parse(string value) { Int64 result; if (!Int64.TryParse(value, out result)) { return default(Int

我正在使用以下方法提供对各种Type类的TryParse()方法的快速内联访问.基本上我希望能够解析来自Web服务的字符串(如果可能),否则返回默认值.
  1. privateInt64Int64Parse(string value){
  2. Int64 result;
  3. if(!Int64.TryParse(value,out result)){returndefault(Int64);}
  4. return result;
  5. }
  6.  
  7. privateDateTimeDateTimeParse(string value){
  8. DateTime result;
  9. if(!DateTime.TryParse(value,out result)){returndefault(DateTime);}
  10. return result;
  11. }
  12.  
  13. privateDecimalDecimalParse(string value){
  14. Decimal result;
  15. if(!Decimal.TryParse(value,out result)){returndefault(Decimal);}
  16. return result;
  17. }

这些是非常重复的,对我来说,可能有一种方法可以将它们包装成单个通用方法.

我坚持以下但不确定如何继续或如何搜索如何继续.

  1. private T ParseString<T>(string value){
  2. T result;
  3. if(!T.TryParse(value,out result)){returndefault(T);}
  4. return result;
  5. }

添加一些上下文.这是为了收听来自特定信用卡结算公司的回发的听众.我没有在此步骤进行验证,因为这是在稍后的业务规则步骤中完成的.例如,我不在乎bank_batch_number是作为int,string还是冻干的啮齿动物进入;如果我不能干净地记录我不使用的字段,我不会停止异常.我关心ext_product_ID存在于我们数据库中,并且在消息中具有与currency_amount_settled相匹配的价格;如果该测试失败,则交易被暂停,将记录警告,我们的CS员工和我自己将收到警报.

下面提到的文化事物是圣人的建议.

解决方法

为什么不使用简单的扩展方法?

Jon Skeet关于仅使用各种TryParse方法的默认结果的答案是好的.不过,扩展方法仍然有一个很好的方面.如果你这么做很多,你可以在一行代码而不是三行代码中完成相同的调用代码(加上可选择指定显式默认值).

我确实意识到,在我原来的答案中,我基本上只提供了一种略微不同的方式来做同样的事情,作者已经在做了.我今天早些时候抓到了这个,当我真正忙碌时,认为委托和自定义解析器的东西看起来可能有点多,然后在没有花时间完全理解问题的情况下找出答案.抱歉.

警告Emptor:我的例子没有说明你试图转换没有TryParse方法的类型. @R_502_3815@调用应该有一些异常处理,依此类推.

  1. /* The examples generates this output when run:
  2.  
  3. 0
  4. 432123
  5. -1
  6. 1/1/0001 12:00:00 AM
  7. 1/1/1970 12:00:00 AM
  8. 1/30/2013 12:00:00 PM
  9. -1
  10. 12342.3233443
  11.  
  12. */
  13.  
  14.  
  15. classProgram
  16. {
  17. static voIDMain(string[] args )
  18. {
  19. DeBUG.Writeline("blah".Parse<Int64>());
  20. DeBUG.Writeline("432123".Parse<long>());
  21. DeBUG.Writeline("123904810293841209384".Parse<long>(-1));
  22.  
  23. DeBUG.Writeline("this is not a DateTime value".Parse<DateTime>());
  24. DeBUG.Writeline("this is not a DateTime value".Parse<DateTime>("jan 1,1970 0:00:00".Convert<DateTime>()));
  25. DeBUG.Writeline("2013/01/30 12:00:00".Parse<DateTime>());
  26.  
  27. DeBUG.Writeline("this is not a decimal value".Parse<decimal>(-1));
  28. DeBUG.Writeline("12342.3233443".Parse<decimal>());
  29. }
  30. }
  31.  
  32. staticpublicclassExtensions
  33. {
  34. staticprivateDictionary<Type,MethodInfo> s_methods =newDictionary<Type,MethodInfo>();
  35.  
  36. staticpublic T Parse<T>(thisstring value )where T :struct
  37. {
  38. return value.Parse<T>(default( T ));
  39. }
  40.  
  41. staticpublic T Parse<T>(thisstring value,T defaultValue )where T :struct
  42. {
  43. // *EDITED* to cache the Reflection lookup--NOT thread safe
  44. MethodInfo m =null;
  45. if( s_methods.ContainsKey(typeof( T )))
  46. {
  47. m = s_methods[typeof( T )];
  48. }
  49. else
  50. {
  51. m =typeof( T ).@R_502_3815@(
  52. "TryParse",BindingFlags.Public|BindingFlags.Static,Type.DefaultBinder,new[]{typeof(string),typeof( T ).MakeByRefType()},null
  53. );
  54. s_methods.Add(typeof( T ),m );
  55. }
  56.  
  57. var args =newobject[]{ value,null};
  58. if((bool)m.Invoke(null,args ))
  59. {
  60. return(T) args[1];
  61. }
  62. return defaultValue;
  63. }
  64. }

以上是小编为你收集整理的C#中TryParse()的通用包装器全部内容。更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2022-06-18 09:55
  • 阅读 ( 307 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章