C# 具有属性的快速异常。有可能吗?

C# 具有属性的快速异常。有可能吗?,c#,attributes,methods,C#,Attributes,Methods,有没有快速的方法来验证空参数 通过属性还是什么 将其转换为: public void Method(type arg1,type arg2,type arg3) { if (arg1== null) throw new ArgumentNullException("arg1"); if (arg2== null) throw new ArgumentNullException("arg2"); if (arg3== null) throw new ArgumentN

有没有快速的方法来验证空参数 通过属性还是什么

将其转换为:

public void Method(type arg1,type arg2,type arg3)
{
     if (arg1== null) throw new ArgumentNullException("arg1");
     if (arg2== null) throw new ArgumentNullException("arg2");
     if (arg3== null) throw new ArgumentNullException("arg3");
     //Business Logic
}
变成这样:

[VerifyNullArgument("arg1","arg2","arg3")]
public void Method(type arg1,type arg2,type arg3)
{
      //Business Logic
}

想法?谢谢大家。

你们正在寻找。

有内置的.NET4。这可能是你能得到的最接近的了。如果您选择走这条路线,那么在上会有更多的信息。

不是属性,而是类似的想法:

class SomeClass
{
    public static void VerifyNullArgument(params object objects)
    {
        if (objects == null)
        {
            throw new ArgumentNullException("objects");
        }

        for (int index = 0; index < objects.Lenght; index++)
        {
            if (objects[index] == null)
            {
                throw new ArgumentException("Element is null at index " + index,
                    "objects");
            }
        }
    }
}

这将抛出一个
NullReferenceException
。如果(obj==null)抛出新的ArgumentNullException(obj.ToString()),则需要采用
表达式[]
这将在尝试调用obj.ToString()时引发NullReferenceException;哈哈。。。愚蠢的错误。:)我写这段话时显然没有思考但是基本的想法就在那里。在别人复制粘贴你的“愚蠢错误”之前纠正它。@Steven:但它仍然是错误的。您应该抛出一个
ArgumentNullException
,其中包含null参数的名称。此外,请记住中间的一个参数可能被允许为null。当您将arg1重命名为其他名称时会发生什么情况?与注释一样,它们也会发生变化。像
方法这样的参数级属性([NotNull]类型arg1,[NotNull]类型arg2,[NotNull]类型arg3)
?代码契约根本不能解决OP的问题,因为它仍然需要同样多的键入。但我更喜欢它们,因为它可以进行潜在的编译时检查。@Josh Einstein:你说得对,在这种情况下,代码不会少很多。
public void Method(type arg1,type arg2,type arg3)
{
    SomeClass.VerifyNullArgument(arg1, arg2, arg3);
    //Business Logic
}