当前位置: 首页 > news >正文

阿雷网站建设公司潜江资讯网招聘临时工

阿雷网站建设公司,潜江资讯网招聘临时工,佛山营销网站建设推广,珠海百度seo公司前一篇发出来后引发了积极的探讨#xff0c;起到了抛砖引玉效果#xff0c;感谢大家参与。 吐槽一下#xff1a;这个问题比其看起来要难得多得多啊。 大家的讨论最终还是没有一个完全正确的答案#xff0c;不过我根据讨论结果总结了一个差不多算是最终版的代码#xff0c;…前一篇发出来后引发了积极的探讨起到了抛砖引玉效果感谢大家参与。 吐槽一下这个问题比其看起来要难得多得多啊。 大家的讨论最终还是没有一个完全正确的答案不过我根据讨论结果总结了一个差不多算是最终版的代码这里分享出来毕竟这是大家共同的智慧结晶没有交流和碰撞就没有这段代码。   探讨贡献提名典礼 首先感谢 花生~~ 以及 NETRUBE 提出了使用 GetTypeCode() 获取类型代码的方式这个比 typeof() 的性能要高但是有一点局限性后面代码中会指出。 由 JTANS 以及 入夏 提出的 ValueType 判断也是有意义的但显然仅仅做这个判断只能确定是否为值类型还不能确定是否为我们要的数值类型。 由 石山不高 提出 Decimal 是非基元类型这是正确的我们在最终代码中对其进行了特殊处理。 由 花生 为什么有两个叫花生的(﹏)~给出的代码比较完善是比较具有总结性的讨论成果了最接近最终版 其存在的问题主要是 char 和 bool 类型还是会被当做数值以及判断顺序需要小幅优化。   可能也许大概差不离就是最终版代码也可能不是 除了对上述存在问题的改进还重新调整为3个方法分别是用来判断是否为数值类型、可空数值类型及可空类型。 /// summary/// 判断是否为数值类型。/// /summary/// param namet要判断的类型/param/// returns是否为数值类型/returnspublic static bool IsNumericType(this Type t){var tc Type.GetTypeCode(t);return (t.IsPrimitive t.IsValueType !t.IsEnum tc ! TypeCode.Char tc ! TypeCode.Boolean) || tc TypeCode.Decimal;}/// summary/// 判断是否为可空数值类型。/// /summary/// param namet要判断的类型/param/// returns是否为可空数值类型/returnspublic static bool IsNumericOrNullableNumericType(this Type t){return t.IsNumericType() || (t.IsNullableType() t.GetGenericArguments()[0].IsNumericType());}/// summary/// 判断是否为可空类型。/// 注意直接调用可空对象的.GetType()方法返回的会是其泛型值的实际类型用其进行此判断肯定返回false。/// /summary/// param namet要判断的类型/param/// returns是否为可空类型/returnspublic static bool IsNullableType(this Type t){return t.IsGenericType t.GetGenericTypeDefinition() typeof(Nullable);}   为了累死电脑而设计的测试用代码 使用这个测试代码跑可以通过基本涵盖了常用类型。 [TestClass]public class BasicTest{[TestMethod]public void 数值类型判断测试(){for (int i 0; i 500000; i){Assert.IsTrue((591).GetType().IsNumericType());Assert.IsTrue((31.131).GetType().IsNumericType());Assert.IsTrue((31.131f).GetType().IsNumericType());Assert.IsTrue(((Int64)31).GetType().IsNumericType());Assert.IsTrue((new decimal(31.351)).GetType().IsNumericType());Assert.IsTrue((new Decimal(31.351)).GetType().IsNumericType());Assert.IsTrue(((byte)31).GetType().IsNumericType());Assert.IsTrue(((UInt64)31).GetType().IsNumericType());Assert.IsTrue(((UIntPtr)31).GetType().IsNumericType());Assert.IsTrue(((short)31).GetType().IsNumericType());Assert.IsTrue(((Single)31).GetType().IsNumericType());Assert.IsTrue((typeof(Int64?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(UInt64?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(decimal?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(Decimal?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(UIntPtr?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(byte?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(Single?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(Double?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(float?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(double?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(int?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(short?)).IsNumericOrNullableNumericType());Assert.IsTrue((typeof(NullableByte)).IsNumericOrNullableNumericType());Assert.IsFalse(DateTime.Now.GetType().IsNumericType());Assert.IsFalse(TimeSpan.FromDays(2).GetType().IsNumericType());Assert.IsFalse(aacc.GetType().IsNumericType());Assert.IsFalse(System.UriPartial.Path.GetType().IsNumericType());Assert.IsFalse(c.GetType().IsNumericType());Assert.IsFalse(false.GetType().IsNumericType());Assert.IsFalse((typeof(DateTime?)).IsNumericOrNullableNumericType());Assert.IsFalse((typeof(Char?)).IsNumericOrNullableNumericType());Assert.IsFalse((typeof(char?)).IsNumericOrNullableNumericType());Assert.IsFalse((typeof(System.UriPartial?)).IsNumericOrNullableNumericType());Assert.IsFalse((typeof(Boolean?)).IsNumericOrNullableNumericType());Assert.IsFalse((typeof(bool?)).IsNumericOrNullableNumericType());}}} 需指出的是 这里对可空类型判断没有使用 GetType() 方法获取类型对象因为我测试了一下可空类型执行 GetType() 返回的仍然是不可空的原类型直接进行判断是否为数值类型即可。 那么为什么还要做针对可空类型的判断呢如果你试过在 ASP.Net Mvc 中获取到模型属性的 ModelMetadata 你就会知道其 ModelType 属性返回的就是 Nullable 类型可空类型的判断就是给这种情况使用的。   老外不服跑个分 JEFFERY YOU 提出应该做一个测试确实数据最有说服力。 我们就以上面的测试代码来跑注意这是循环五十万轮的测试每轮执行该方法36次共计执行一千八百万次我们让代码连续跑三遍取第三遍的时间结果第一遍的包含初始化流程肯定会慢一些。 我们的代码测试结果 可以看出这个效率还是蛮高的平均每轮耗时0.016546毫秒平均每次执行方法耗时0.0004596111111毫秒 然后我们把老外的代码拿过来看一下它跑不通这个测试因为以下类型它没做判断Decimal、Byte、UIntPtr 。 还有个我们测试代码之外的 IntPtr 。 加上这些类型的判断之后主体方法代码如下 return t typeof(int)|| t typeof(double)|| t typeof(long)|| t typeof(short)|| t typeof(float)|| t typeof(Int16)|| t typeof(Int32)|| t typeof(Int64)|| t typeof(uint)|| t typeof(UInt16)|| t typeof(UInt32)|| t typeof(UInt64)|| t typeof(sbyte)|| t typeof(Single)|| t typeof(Decimal)|| t typeof(Byte)|| t typeof(UIntPtr)|| t typeof(IntPtr); 老外的代码测试结果 这是妥妥的输给我们了老外给咱跪了那些支持简单粗暴实打实的朋友错了。 但是稍等一下老外的代码里其实有些明显的重复判断比如在C#中 typeof() 获取的 int 和 Int32 其实是一样的我们来优化一下这些重复 return t typeof(Int16) || t typeof(Int32) || t typeof(Int64) || t typeof(Single) || t typeof(Double) || t typeof(UInt16) || t typeof(UInt32) || t typeof(UInt64) || t typeof(Byte) || t typeof(Decimal) || t typeof(SByte) || t typeof(UIntPtr) || t typeof(IntPtr); 优化版的老外代码测试结果 哈老外还是跪给我们了。 下面我们再将这个代码改进为使用 TypeCode 方式进行判断这会提高一些性能。 但是需要注意 从 Enum 类型中获取到的 TypeCode 会是对应 Int32 类型这不是我们要的结果需要额外对其进行判断。 TypeCode 枚举中是没有  IntPtr 和 UIntPtr 项的所以还是要做额外判断。 改进后的代码 if (t.IsEnum) return false;var tc Type.GetTypeCode(t);switch (tc){case TypeCode.Int16:case TypeCode.Int32:case TypeCode.Int64:case TypeCode.Single:case TypeCode.Double:case TypeCode.UInt16:case TypeCode.UInt32:case TypeCode.UInt64:case TypeCode.Byte:case TypeCode.Decimal:case TypeCode.SByte:return true;default:return t typeof(UIntPtr) || t typeof(IntPtr);} 老外的代码改进为用 TypeCode 方式进行判断后的测试结果 这个效果就很不错了一千八百万次的量级仅仅是比我们的最终代码慢了81毫秒实测三遍时是稳定地输给我们的代码不是飘出来的偶然浮动结果这个性能差距可以忽略了。 这也可以看做是另一个最终版的代码了因为如果根据你的使用环境来把常用类型放到最前面的话性能还会更好尽管你根本感觉不到单次万分之几毫秒的差别但是不可回避的是对那些我们没有预见到的类型的支持问题比如这  IntPtr 和 UIntPtr 在我们前面给出的最终版代码中这两个类型是未做特殊适配就天然支持的。 所以如果你重视优雅度、扩展性和编码知识层级的话还是建议你使用我前面给出的最终代码。   巡回总结报告会演讲 看似非常简单的问题背后却有这么深的水啊若没有大家的讨论断然不会得到这样的成果并且学到这么多知识。 没有完美的代码我们期待更好在此继续讨论吧也许交流碰撞后还会有更优秀的方案 微软卧槽看你们这么苦逼我给你们直接做一个属性出来吧请期待.Net 框架v10.29博主生日特别无码汉化激情未删减导演剪辑泄露蓝光3D版………嗯我们将其委托给暴雪工作室开发。转载于:https://www.cnblogs.com/SkyD/p/4058486.html
http://www.yutouwan.com/news/184402/

相关文章:

  • 搞一个网站多少钱做网站关于创新的
  • 国际商业网站做网站怎么套模板
  • 网站建设联系方式高校网站网页设计
  • 朝阳区北京网站建设新浪短链接在线生成
  • 小程序在哪里网站seo优化分析报告
  • 网站维护有文化建设费成都旅游网站建设地址
  • 艺术家网站建设中企业网站建设的策划初期的一些误区洛阳市做网站贴吧
  • 广德县建设协会网站网站头像设计免费制作
  • 荆轲网络做网站专业设计企业logo
  • 中国字体设计网站网站开发员工作职责
  • 王建设个人网站网站建设合同法
  • 网站代码图片wordpress投稿插件
  • php 视频网站开发网页设计职业
  • 重庆企业网站推广流程如何自建公司网站
  • 制作一个收费网站要多少钱网页设计素材 百度云
  • 顺义哪里有做网站设计的一个空间做两个网站
  • 免费平台推广优化大师免费版
  • 阿坝州城乡建设网站用centos搭建wordpress
  • 网站制作哪种好企业管理app排行榜
  • 哪些网站做的比较好看的外贸定制网站
  • 网站功能描述与分析美工培训去哪里学
  • 廉洁常德网站网站风格趋势
  • 电子商务网站建设与制作环球军事新闻
  • 网站建设费用的会计国外有网站备案制度吗
  • 耒阳市做网站的做啊网站
  • wordpress修改首页模板湖南网站优化
  • 百度网站介绍网站建设推广襄樊
  • access 网站源码wordpress 仪表板主题
  • 推广做网站多少钱开发app制作公司
  • 网站网址前的小图标怎么做的深圳红酒网站建设