咨询区

  • Farhad

请问是否有办法可以遍历某个方法的 参数列表 中是否有 null 的情况,比如下面这样的伪代码:

public void test (string arg1, string arg2, object arg3, DataTable arg4)
{foreach (var item in argus){if( item == null){throw;}}// do the rest...
}

回答区

  • Bjorn Coltof

你可以在方法参数中使用 params,这样你就可以实现对 方法参数列表 的遍历,我写了一个工具函数,代码如下:

public void CheckForNullArguments(params object[] args)
{foreach (object arg in args)if (arg == null) throw new ArgumentNullException();
}

或者用 linq 判断。

public void CheckForNullArguments(params object[] args){if (args.Any(a => a == null)){throw new ArgumentNullException("args");}}

然后就可以像下面这样调用。

CheckForNullArguments(arg1, arg2, arg3, arg4);
  • Adrian Iftode

楼上用 params ,我觉得太麻烦,如果你不想把项目中的每一个方法参数配上 params 前缀,我建议你使用 AOP 方式,比如说开源的 PostSharp,参考如下代码:

using System;
using System.Data;
using System.Reflection;
using PostSharp.Aspects;namespace TestAOP
{class Program{static void Main(string[] args){SomeClass someInstance = new SomeClass();someInstance.test(null, null, null, null);}}public class SomeClass{[CheckForNulls]public void test(string arg1, string arg2, object arg3, DataTable arg4){           // do the rest...}}[Serializable]public class CheckForNullsAttribute : OnMethodBoundaryAspect{public override void OnEntry(MethodExecutionArgs args){ParameterInfo[] parameters = args.Method.GetParameters();            for (int i = 0; i < args.Arguments.Count; i++){if (args.Arguments[i] == null)throw new ArgumentNullException(parameters[i].Name);}}}
}

如果想了解更多,参考:http://www.sharpcrafters.com

点评区

遍历 args 列表,让我想起了 js,用 aop 的思路确实不错,学习了。

技术群:添加小编微信并备注进群

小编微信:mm1552923

公众号:dotNet编程大全

如何用 foreach 遍历方法中的所有参数?相关推荐

  1. Struts2.3,s:iterator,c:forEach遍历map中的list集合

    一:首先是<s:iterator></s:iterator>遍历map中的list集合,代码如下: 1.首先是后台代码,包括定义map和给map中赋值,代码如下: packag ...

  2. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是

    [单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...

  3. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...

  4. Mybatis的Mapper方法中传递map参数的写法

    Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...

  5. java foreach 遍历map_java中遍历map的几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...

  6. java foreach 遍历map_Java中遍历Map

    Java中的map遍历有多种方法,如最早的Iterator,Java5支持的foreach,Java8 Lambda. 先初始化一个map public class TestMap { public ...

  7. python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)

    一.scatter scatter方法主要用来做散点图展示,而plot方法主要用来做折线图展示,也可以用于散点图的展示.两个方法的参数基本是通用的.以scatter方法为例,常用参数包括: plt.s ...

  8. C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法

    简单说明: 要想自己写的类实现foreach方法,那么可以继承IEnumerator来实现. 除了实现继承接口中的方法,还要实现一个GetEnumerator()方法才行,返回值是你要遍历的对象.   ...

  9. C# 方法中的this参数

    用C#的this关键字,对Unity中的Transform类进行扩展的一个实例: public static class GameHelper {public static void FindChil ...

最新文章

  1. NEC中标里斯本智慧城市项目 助力城市整体数字化变革
  2. 8核32g mysql性能_MySQL性能优化之参数配置
  3. Coding 初级教程(二)——上传已有项目
  4. 在服务器搭建深度学习环境随笔
  5. C语言中“数组名”和“数组名”
  6. 1_1 FactoryMode 工厂模式
  7. Nginx的应用之虚拟主机
  8. 硬盘快速格式化和格式化的区别
  9. apk、ipa包size优化晋级手段
  10. ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档
  11. 奈飞文化手册_2019春节读书笔记【奈飞文化手册】
  12. Flutter学习 — 创建一个 grid List
  13. 【转】使用spring @Scheduled注解执行定时任务
  14. 批处理管理员运行当前路径问题
  15. qt TCP 网络编程
  16. 寒假学习之stm32(15)----DMA(direct memory access)
  17. 评课用计算器计算机,《巧用计算器》评课稿
  18. 使用迅雷等下载工具下载Android SDK快速安装
  19. 微信小程序 自定义控件 数字键盘
  20. 远程控制电脑的软件哪个比较好用

热门文章

  1. 影院及影院详情页面实现
  2. mysql打字看不见鼠标_电脑打字不显示怎么办?键盘不能打字不能正常输入怎么办?...
  3. 安卓系统根据SIM卡槽ID获取SIM卡信息
  4. 正则表达式周二挑战赛 第一周
  5. spring boot创建新工程运行报错解决方案
  6. skr!skr!能视频通话的360儿童手表,原来是这样实现的!
  7. 免费开源:目标检测(对目标计数)+车牌检测+车牌识别的融合计数
  8. 如何拍出来好看的Vlog,必备小技能(五)?
  9. Android扫雷实训小结,扫雷课程实训报告.doc
  10. 记一道简单的java面试题