Check if a property exists in a class

.net, c#, reflection

Solution

Your method looks like this:

public static bool HasProperty(this object obj, string propertyName)
{
    return obj.GetType().GetProperty(propertyName) != null;
}

This adds an extension onto `object` - the base class of everything. When you call this extension you're passing it a `Type`:

var res = typeof(MyClass).HasProperty("Label");

Your method expects an instance of a class, not a `Type`. Otherwise you're essentially doing

typeof(MyClass) - this gives an instanceof `System.Type`. 

Then

type.GetType() - this gives `System.Type`
Getproperty('xxx') - whatever you provide as xxx is unlikely to be on `System.Type`

As @PeterRitchie correctly points out, at this point your code is looking for property `Label` on `System.Type`. That property does not exist.

The solution is either

a) Provide an instance of MyClass to the extension:

var myInstance = new MyClass()
myInstance.HasProperty("Label")

b) Put the extension on `System.Type`

public static bool HasProperty(this Type obj, string propertyName)
{
    return obj.GetProperty(propertyName) != null;
}

and

typeof(MyClass).HasProperty("Label");

Problem

I try to know if a property exist in a class, I tried this : ``` public static bool HasProperty(this object obj, string propertyName) { return obj.GetType().GetProperty(propertyName) != null; } ``` I don't understand why the first test method does not pass ? ``` [TestMethod] public void Test_HasProperty_True() { var res = typeof(MyClass).HasProperty("Label"); Assert.IsTrue(res); } [TestMethod] public void Test_HasProperty_False() { var res = typeof(MyClass).HasProperty("Lab"); Assert.IsFalse(res); } ```

Original source

Related problems