如何用 foreach 遍历方法中的所有参数?
咨询区
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 遍历方法中的所有参数?相关推荐
- Struts2.3,s:iterator,c:forEach遍历map中的list集合
一:首先是<s:iterator></s:iterator>遍历map中的list集合,代码如下: 1.首先是后台代码,包括定义map和给map中赋值,代码如下: packag ...
- 在JAVA语言程序中main_在Java程序main方法中,正确的参数是
[单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...
- Mybatis的Mapper方法中传递map参数的写法
Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...
- java foreach 遍历map_java中遍历map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- java foreach 遍历map_Java中遍历Map
Java中的map遍历有多种方法,如最早的Iterator,Java5支持的foreach,Java8 Lambda. 先初始化一个map public class TestMap { public ...
- python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)
一.scatter scatter方法主要用来做散点图展示,而plot方法主要用来做折线图展示,也可以用于散点图的展示.两个方法的参数基本是通用的.以scatter方法为例,常用参数包括: plt.s ...
- C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法
简单说明: 要想自己写的类实现foreach方法,那么可以继承IEnumerator来实现. 除了实现继承接口中的方法,还要实现一个GetEnumerator()方法才行,返回值是你要遍历的对象. ...
- C# 方法中的this参数
用C#的this关键字,对Unity中的Transform类进行扩展的一个实例: public static class GameHelper {public static void FindChil ...
最新文章
- NEC中标里斯本智慧城市项目 助力城市整体数字化变革
- 8核32g mysql性能_MySQL性能优化之参数配置
- Coding 初级教程(二)——上传已有项目
- 在服务器搭建深度学习环境随笔
- C语言中“数组名”和“数组名”
- 1_1 FactoryMode 工厂模式
- Nginx的应用之虚拟主机
- 硬盘快速格式化和格式化的区别
- apk、ipa包size优化晋级手段
- ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档
- 奈飞文化手册_2019春节读书笔记【奈飞文化手册】
- Flutter学习 — 创建一个 grid List
- 【转】使用spring @Scheduled注解执行定时任务
- 批处理管理员运行当前路径问题
- qt TCP 网络编程
- 寒假学习之stm32(15)----DMA(direct memory access)
- 评课用计算器计算机,《巧用计算器》评课稿
- 使用迅雷等下载工具下载Android SDK快速安装
- 微信小程序 自定义控件 数字键盘
- 远程控制电脑的软件哪个比较好用