是否可以遍历函数参数来检查它们中的任何一个是否为空(或者由另一个自定义函数检查它们)? 像这样的东西:
public void test (string arg1, string arg2, object arg3, DataTable arg4)
{
foreach (var item in argus)
{
if( item == null)
{
throw;
}
}
// do the rest...
}
“argus”的正确关键字是什么?我知道这可以通过更多的if语句,但寻找更快的方式......
答案 0 :(得分:14)
您可以使用params关键字循环遍历所有参数,但之后您将在方法本身中使用它们的类型。我会编写一个检查null的实用程序函数。
public void CheckForNullArguments(params object[] args)
{
foreach (object arg in args)
if (arg == null) throw new ArgumentNullException();
}
您可以在方法开头调用此方法,例如
CheckForNullArguments(arg1, arg2, arg3, arg4);
答案 1 :(得分:7)
我想你不想改变你项目中每个方法的参数。您可以使用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/获取PostSharp,你也可以在那里找到doc。
答案 2 :(得分:5)
如果您想要一种简单的循环参数方法,您应该考虑使用params关键字
public void test (params object args[])
{
foreach(var argument in args)
{
if(item == null)
{
throw new ArgumentNullException();
}
}
}
除此之外你可以使用反射,但似乎你不需要它那么糟糕
答案 3 :(得分:5)
LINQ方式:
public static void Test(params object[] args)
{
if (args.Any(a => a == null))
{
throw new ArgumentNullException("args");
}
}