如何访问方法的参数的属性

时间:2014-02-14 03:01:30

标签: c# reflection attributes

如何确定参数是否附加了自定义属性?

我认为这个测试用例会通过:

    [TestCase("")]
    public void TestParameterAttribute([NotRequired]string theString)
    {
        var result = false;

        foreach (var attribute in theString.GetType().GetCustomAttributes(true))
        {
            if (attribute.GetType() == (typeof(NotRequiredAttribute)))
            {
                result = true;
            }
        }

        Assert.That(result, Is.True);
    }

3 个答案:

答案 0 :(得分:1)

这需要更多的工作。

[TestCase("")]
public void TestParameterAttribute([NotRequired]string theString)
{
    var method = MethodInfo.GetCurrentMethod();
    var parameter = method.GetParameters()[0];
    var result = false;

    foreach (var attribute in parameter.GetCustomAttributes(true))
    {
        if (attribute.GetType() == (typeof(NotRequiredAttribute)))
        {
            result = true;
        }
    }

    Assert.That(result, Is.True);
}

答案 1 :(得分:1)

theString.GetType()获得对代表Type的{​​{1}}的引用。在其上调用string将在GetCustomAttributes类中查找这些属性。

您要做的是...获取当前方法中参数的属性。也许是这样的:

string

答案 2 :(得分:1)

您也可以使用GetCustomAttribute方法的通用版本:

parameter.GetCustomAttribute<NotRequiredAttribute>() != null