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
    
  • 相关阅读:
    Sublime_text 3 安装 Package Control
    sql server cross/outer apply 用法
    sql server pivot/unpivot 行列互转
    sql server利用开窗函数over() 进行分组统计
    小记sql server临时表与表变量的区别
    自己实现各种进制相互转换
    我这样理解js里的this
    js 数组去重
    分布式计算
    START法则
  • 原文地址:https://www.cnblogs.com/dudu/p/11228948.html
Copyright © 2011-2022 走看看