检查自定义属性的方法

时间:2013-01-28 01:58:14

标签: c# custom-attributes late-binding

我不确定为什么以下方法总是返回false

        // method to check for presence of TestCaseAttribute
    private static bool hasTestCaseAttribute(MemberInfo m)
    {
        foreach (object att in m.GetCustomAttributes(true))
        {
            Console.WriteLine(att.ToString());
            if (att is TestCase.TestCaseAttribute) // also tried if (att is TestCaseAttribute)
            {
                return true;
            }
        }
        return false;

    }

即使控制台输出如下所示:

TestCase.DateAttribute
TestCase.AuthorAttribute
TestCase.TestCaseAttribute

我在这里缺少什么?

编辑;这种方法似乎有效......

  private static bool hasTestCaseAttribute(MemberInfo m)
    {
        if (m.GetCustomAttributes(typeof(TestCaseAttribute), true).Any())
        {
            return true;
        }
        else
        {
            return false;
        }
    }

3 个答案:

答案 0 :(得分:4)

这应该可以解决问题。

    private static bool hasTestCaseAttribute(MemberInfo m)
    {
        return m.GetCustomAttributes(typeof(TestCaseAttribute), true).Any();
    }

答案 1 :(得分:2)

public static bool HasCustomAttribute(MethodInfo methodInfo, bool inherit = false)
{
    return methodInfo.GetCustomAttribute<CustomAttribute>(inherit) != null;
}

您可以使用上面的功能,它比您当前的方法更简洁。 sa_ddam的片段也有效。

答案 2 :(得分:0)

你可以试试这个:

private static bool hasTestCaseAttribute(MethodInfo method)
{    
    object[] customAttributes = Attribute.GetCustomAttribute(method, 
                                    typeof(TestCase), true) as TestCase;
    if(customAttributes.Length>0 && customAttributes[0]!=null)
    {
        return true;
    }
    else
    {
        return false;
    }
  }