Как использовать .Net отражение для поиска свойства по имени, игнорируя регистр? - PullRequest
5 голосов
/ 11 ноября 2008

У меня был следующий фрагмент кода, который ищет свойства экземпляра по имени:

var prop = Backend.GetType().GetProperty(fieldName);

Теперь я хочу игнорировать регистр fieldName, поэтому я попробовал следующее:

var prop = Backend.GetType().GetProperty(fieldName, BindingFlags.IgnoreCase);

... Без кубиков. Теперь prop не найдет имена полей с точным регистром.

Следовательно ..... Как использовать .Net отражение для поиска свойства по имени без учета регистра?

Ответы [ 2 ]

14 голосов
/ 11 ноября 2008

Также необходимо указать BindingFlags.Public | BindingFlags.Instance:

using System;
using System.Reflection;

public class Test
{
    private int foo;

    public int Foo { get { return foo; } }

    static void Main()
    {
        var prop = typeof(Test).GetProperty("foo",
                                            BindingFlags.Public
                                            | BindingFlags.Instance 
                                            | BindingFlags.IgnoreCase);
        Console.WriteLine(prop);
    }
}

(Когда вы не указываете никаких флагов, public, instance и static предоставляются по умолчанию. Если вы указываете это явно, я предлагаю вам указать только один из экземпляров или static, если вы знаете, что вам нужно.)

2 голосов
/ 11 ноября 2008

Попробуйте добавить область BindingFlags примерно так:

var prop = Backend.GetType().GetProperty(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);

Это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...