• C# 新技巧(一)


    概述:所有代码均来自MVC源码的阅读。实际上,也是框架开发中常用的技巧。

    1.使用Empty模式处理空对象

    return Enumerable.Empty<ModelValidationResult>();

    2.ConcurrentDictionary的GetOrAdd

    ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
    //如果存在pzdn的键,则直接返回;否则,添加CreateObject(),并返回
    var reuslt = dic.GetOrAdd("pzdn", CreateObject());

    3.使用Case从Object[]转为IEnumberable<>

    对于类型转换,往往进行遍历,而忘记了使用扩展方法。

    type.GetCustomAttributes(typeof(AttributeUsageAttribute), true)
                        .Cast<AttributeUsageAttribute>()
                        .First()

    4.使用??简化if

    ??可以简化注释代码

    public string Roles
    {
        //get
        //{
        //    if (_roles == null) return string.Empty;
        //    return _roles;
        //}
        get { return _roles ?? String.Empty; }
        set
        {
            _roles = value;
            _rolesSplit = SplitString(value);
        }
    }
     

    5.使用构造函数重载来完成多构造器

    其核心为:所有的重载,最终都指向一个具体实现。如下加粗代码:

    public HttpStatusCodeResult(int statusCode)
        : this(statusCode, null)
    {
    }
    
    public HttpStatusCodeResult(HttpStatusCode statusCode)
        : this(statusCode, null)
    {
    }
    
    public HttpStatusCodeResult(HttpStatusCode statusCode, string statusDescription)
        : this((int)statusCode, statusDescription)
    {
    }
    
    public HttpStatusCodeResult(int statusCode, string statusDescription)
    {
        StatusCode = statusCode;
        StatusDescription = statusDescription;
    }

    6.使用throw Exception来切除分支

    对于指定的方法,是在特定的上下文中,做特定的事情。

    而上下文,可能就是通过参数进行传递的,或者访问Member。

    当上下文为空,或者不满足条件时,方法的执行就没有意义。所以,在函数的适当位置,进行如下类似的判断:

    if (httpContext == null)
    {
        throw new ArgumentNullException("httpContext");
    }

    7.使用TypeDescriptor进行读取特性列表

    IEnumerable<AuthorizeAttribute> attributes = TypeDescriptor.GetAttributes(someClass).OfType<AuthorizeAttribute>();

    8.使用Linq的let定义中间变量

    如果想要知道let关键字的作用,很简单,考虑实现以下同样的功能,如果将 let trimmed = piece.Trim() 去掉,则代码将怎么写?

    internal static string[] SplitString(string original)
    {
        if (String.IsNullOrEmpty(original))
        {
            return new string[0];
        }
    
        var split = from piece in original.Split(',')
                    let trimmed = piece.Trim()
                    where !String.IsNullOrEmpty(trimmed)
                    select trimmed;
        return split.ToArray();
    }
  • 相关阅读:
    React源码深度解析视频 某课网(完整版)
    解决VueRoter/element-ui路由报错Error: Avoided redundant navigation to current location的问题
    package-lock.json的作用
    encodeURI()和encodeURIComponent() 区别
    Webpack HMR 原理解析
    Kibana详细入门教程
    大数据可视化(万物互联)
    ES11来了,有些新特性还是值得一用的!
    Prometheus(普罗米修斯)——适合k8s和docker的监控系统
    linux安装pm2
  • 原文地址:https://www.cnblogs.com/pengzhen/p/3801335.html
Copyright © 2020-2023  润新知