C# params 可变参数使用注意

本文介绍了一个在.NET Core项目中遇到的关于null引用异常的问题,并通过示例代码展示了如何正确地处理方法中的可变参数及如何避免null引用异常的发生。

今天在一个 .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

转载于:https://www.cnblogs.com/dudu/p/11228948.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值