如何用 foreach 遍历方法中的所有参数?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用 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 的思路确实不错,学习了。
以上是关于如何用 foreach 遍历方法中的所有参数?的主要内容,如果未能解决你的问题,请参考以下文章
jsp里面如何用forEach取一个数组里面的值,从而实现一个下拉列表