咨询区
-
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 的思路确实不错,学习了。