zoukankan      html  css  js  c++  java
  • C# params 可变参数使用注意

    今天在一个 .NET Core 项目中调用一个自己实现的使用 params 可变参数的方法时触发了 null 引用异常,原以为是方法中没有对参数进行 null 值检查引起的,于是加上 check null 代码:

    public static void BuildBlogPostLinks(params BlogPostDto[] blogPosts)
    {
        if (blogPosts == null)
            return;
    
        foreach (var blogPost in blogPosts)
        {
            //...
        }
    }
    

    结果却出人意料, null 引用异常继续,仔细看异常 stack 才发现原来 null 引用异常是在 foreach 时抛出的,需要在 foreach 时对 blogPost 进行 check null 。

    下面的示例代码可以验证这一点

    class Program
    {
        static void Main(string[] args)
        {
            BuildBlogPostLinks(null);
            BlogPost blogPost = null;
            BuildBlogPostLinks(blogPost);
        }
    
        public static void BuildBlogPostLinks(params BlogPost[] blogPosts)
        {
            if (blogPosts == null)
            {
                Console.WriteLine("blogPosts in null");
                return;
            }
    
            foreach (var blogPost in blogPosts)
            {
                if (blogPost == null)
                {
                    Console.WriteLine("blogPost in null");
                }
                else 
                {
                    Console.WriteLine("blogpost.Title: " + blogPost.Title);
                }
            }
        }
    }
    
    public class BlogPost
    {
        public string Title { get; set; }
    }
    

    运行时的输出结果是

    $ dotnet run
    blogPosts in null
    blogPost in null
    
  • 相关阅读:
    云计算的三种服务模式:IaaS, PaaS, SaaS
    Docker 容器备份例子
    软件版本号
    git 命令小总结
    【Oracle】ORA-12560: TNS: 协议适配器错误
    【VMware】The VMX process exited permaturely
    Linux(CentOS)安装SQL Server
    Linux源码编译安装httpd
    Linux安装MySQL
    Linux安装Tomcat
  • 原文地址:https://www.cnblogs.com/dudu/p/11228948.html
Copyright © 2011-2022 走看看