This might be a silly question. I am trying to understand the concept of conditional attribute.My aim is to get a specific attribute instance and ended up in getting NullReferenceException instead of the output "CONDITION1".

class Program
    {
    private static void Main(string[] args)
    {
        //Getting a specific attribute instance
        ConditionalAttribute conditionalAttribute =
            (ConditionalAttribute) Attribute.GetCustomAttribute(typeof (Class1), typeof (ConditionalAttribute));
        string condition = conditionalAttribute.ConditionString;
        Console.WriteLine(condition);
        Console.ReadLine();
    }

    public class Class1
    {
        [Conditional("CONDITION1"), Conditional("CONDITION2")]
        private static void MyMethod()
        {
            Console.WriteLine("Mymethod");
        }
    }

    }

I hope i am using right attributes in the GetCustomAttribute. Can someone point out where is the mistake?

Thanks in advance.

有帮助吗?

解决方案

Your class don't have Conditional attribute,your method marked with Conditional Attribute.So you need to get your Method first,then get the Attribute(s)

var attributes = typeof(Class1)
                .GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Static)
                .GetCustomAttributes().OfType<ConditionalAttribute>()
                .OrderBy(a => a.ConditionString);
foreach (var at in attributes)
{
     Console.Write(at.ConditionString);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top