C# switch和case的扩展,大家评价各不相同,其实本人也感觉有点牵强。其中举了一个Swith扩展的应用,今天突然有了新想法,对它改进了一些。所谓“语不惊人死不休”,且看这次的改进如何。
成都创新互联公司是一家集网站建设,崂山企业网站建设,崂山品牌网站建设,网站定制,崂山网站建设报价,网络营销,网络优化,崂山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
我先把扩展的源代码贴出来,折叠一下,等看完后面的例子和讲解再回来看。
- public static class SwithCaseExtension
- {
- SwithCase#region SwithCase
- public class SwithCase
, TOther> - {
- public SwithCase(TCase value, Action
action) - {
- Value = value;
- Action = action;
- }
- public TCase Value { get; private set; }
- public Action
Action { get; private set; } - }
- #endregion
- Swith#region Swith
- public static SwithCase
, TOther> Switch , TOther>
(this TCase t, Actionaction) where TCase : IEquatable - {
- return new SwithCase
, TOther>(t, action); - }
- public static SwithCase
, TOther> Switch , TCase, TOther>
(this TInput t, Func, TCase> selector, Action action)
where TCase : IEquatable- {
- return new SwithCase
, TOther>(selector(t), action); - }
- #endregion
- Case#region Case
- public static SwithCase
, TOther> Case , TOther>
(this SwithCase, TOther> sc, TCase option, TOther other)
where TCase : IEquatable- {
- return Case(sc, option, other, true);
- }
- public static SwithCase
, TOther> Case , TOther>
(this SwithCase, TOther> sc, TCase option, TOther other, bool bBreak)
where TCase : IEquatable- {
- return Case(sc, c=>c.Equals(option), other, bBreak);
- }
- public static SwithCase
, TOther> Case , TOther>
(this SwithCase, TOther> sc, Predicate predict, TOther other)
where TCase : IEquatable- {
- return Case(sc, predict, other, true);
- }
- public static SwithCase
, TOther> Case , TOther>
(this SwithCase, TOther> sc, Predicate predict,
TOther other, bool bBreak) where TCase : IEquatable- {
- if (sc == null) return null;
- if (predict(sc.Value))
- {
- sc.Action(other);
- return bBreak ? null : sc;
- }
- else return sc;
- }
- #endregion
- Default#region Default
- public static void Default
, TOther>
(this SwithCase, TOther> sc, TOther other) - {
- if (sc == null) return;
- sc.Action(other);
- }
- #endregion
- }
到现在为止估计大家应该有一个疑问了,原来的C# switch和case中可以使用“break”直接返回,这里是怎么处理的呢?Case还有第三个参数,它用来处理实是否break,为true时break,false时继续下一个Case。个人感觉大多数情况下,符合某个条件后一般不需要继续其它的了,所以重载传入true,即默认break。与C# switch和case是相反的。
分享标题:浅析C#switch和case
标题链接:http://www.shufengxianlan.com/qtweb/news9/307459.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联