Question

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.

Was it helpful?

Solution

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);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top