C# params可变参数的使用注意详析

作者:dudu 时间:2021-10-29 12:33:27 

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

标签:c#,params,可变参数
0
投稿

猜你喜欢

  • 重新启动IDEA时maven项目SSM框架文件变色所有@注解失效

    2021-12-08 06:42:23
  • java联调生成测试数据工具类方式

    2021-10-12 06:42:17
  • SpringBoot+SpringCloud用户信息微服务传递实现解析

    2022-12-08 13:51:42
  • Java中常见的5种WEB服务器介绍

    2022-08-02 08:45:50
  • C# 调用腾讯即时通信 IM的示例

    2021-10-29 16:31:17
  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    2022-09-30 01:46:38
  • java结束进程的实例代码

    2023-11-10 14:18:38
  • seata的部署和集成详细介绍

    2023-06-05 08:33:24
  • spring mvc中@RequestBody注解的作用说明

    2022-04-07 14:15:02
  • 使用maven开发springboot项目时pom.xml常用配置(推荐)

    2022-09-19 23:33:48
  • Servlet+JDBC实现登陆功能的小例子(带验证码)

    2021-05-29 03:04:25
  • java构造函数示例(构造方法)

    2022-05-08 19:06:03
  • 简述Java中的四种引用类型

    2023-11-29 00:46:56
  • 一文带你学会规则引擎Drools的应用

    2022-04-03 08:40:59
  • OpenCV + MFC实现简单人脸识别

    2023-02-24 06:15:55
  • 详解java中的Collections类

    2022-02-14 16:30:00
  • Java中finally和return的关系实例解析

    2023-05-31 04:21:31
  • C#微信公众号开发 微信事件交互

    2023-04-22 21:18:31
  • 解决spring.thymeleaf.cache=false不起作用的问题

    2022-03-25 04:27:15
  • android编程实现对话框的封装实例

    2022-02-12 12:58:54
  • asp之家 软件编程 m.aspxhome.com