如何用 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 的思路确实不错,学习了。

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于如何用 foreach 遍历方法中的所有参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何用foreach语句中获取数组元素的下标

如何用php创建一个无限遍历数组,并打印

问大佬php中如何用 foreach解析json

jsp里面如何用forEach取一个数组里面的值,从而实现一个下拉列表

请问php中如何用for循环遍历出关联数组,不要用foreach,用for循环哦

C#中如何用for循环遍历List<类>?