Boris Callens
Boris Callens

Reputation: 93327

BindingFlags.IgnoreCase not working for Type.GetProperty()?

Imagine the following

A type T has a field Company. When executing the following method it works perfectly:

Type t = typeof(T);
t.GetProperty("Company")

Whith the following call I get null though

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

Anybody got an idea?

Upvotes: 267

Views: 57762

Answers (3)

Pop Catalin
Pop Catalin

Reputation: 62940

You've overwritten the default look-up flags, if you specify new flags you need to provide all the info so that the property can be found. For example: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

Upvotes: 539

Josh Warner-Burke
Josh Warner-Burke

Reputation: 1427

Thanks, this really helped me out in a pinch today. I had audit information saved, but with incorrect casing on the property names. (The auditing is built into a datalayer.) Anyway so I had to add IgnoreCase as a binding flag, but then it still didn't work, till my coworker found this answer. The resulting function:

public static void SetProperty(Object R, string propertyName, object value)
{
    Type type = R.GetType();
    object result;
    result = type.InvokeMember(
        propertyName, 
        BindingFlags.SetProperty | 
        BindingFlags.IgnoreCase | 
        BindingFlags.Public | 
        BindingFlags.Instance, 
        null, 
        R, 
        new object[] { value });
}

This is part of a class I call DotMagic.

Upvotes: 14

leppie
leppie

Reputation: 117230

You need to add BindingFlags.Public | BindingFlags.Instance

Upvotes: 57

Related Questions