C# - использование foreach для перебора аргументов метода
можно ли перебирать аргументы функции, чтобы проверить, является ли какой-либо из них нулевым(или проверить их другой пользовательской функцией)? что-то вроде этого:--2-->
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, но ищет более быстрый способ...
4 ответов
Я полагаю, вы не хотите изменять параметры каждого метода в своем проекте(проектах). Вы можете использовать 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 там.
вы можете использовать ключевое слово params для перебора всех аргументов, но затем вы будете использовать их тип в самом методе. Я бы написал служебную функцию, которая проверяет значение null.
public void CheckForNullArguments(params object[] args)
{
foreach (object arg in args)
if (arg == null) throw new ArgumentNullException();
}
вы можете вызвать это в начале своего метода, как
CheckForNullArguments(arg1, arg2, arg3, arg4);
Если вы хотите простой способ перебирать аргументы, вы должны подумать об использовании params ключевое слово
public void test (params object args[])
{
foreach(var argument in args)
{
if(item == null)
{
throw new ArgumentNullException();
}
}
}
кроме этого вы могли бы использовать отражение, но, похоже, вам это не нужно так сильно
путь LINQ:
public static void Test(params object[] args)
{
if (args.Any(a => a == null))
{
throw new ArgumentNullException("args");
}
}