Почему GetProperty не удается найти его?
Я пытаюсь использовать отражение, чтобы получить свойство из класса. Вот пример кода того, что я вижу:
using System.Reflection;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
PropertyInfo[] tmp2 = typeof(TestClass).GetProperties();
PropertyInfo test = typeof(TestClass).GetProperty(
"TestProp", BindingFlags.Public | BindingFlags.NonPublic);
}
}
public class TestClass
{
public Int32 TestProp
{
get;
set;
}
}
}
когда я прослеживаю через это, вот что я вижу:
- когда я получаю все свойства, используя
GetProperties()
, результирующий массив имеет одну запись, для свойстваTestProp
. - когда я пытаюсь получить
TestProp
используяGetProperty()
, Я получаю null обратно.
Я немного в тупике; я не смог найти ничего в MSDN в отношении GetProperty()
чтобы объяснить мне этот результат. Любой помочь?
EDIT:
если я добавить BindingFlags.Instance
до GetProperties()
вызов, свойства не найдены, точка. Это более последовательно и заставляет меня поверить, что TestProp
по какой-то причине не считается свойством экземпляра.
почему бы это? Что мне нужно сделать с классом, чтобы это свойство считалось свойством экземпляра?
3 ответов
добавить BindingFlags.Instance
до GetProperty
звонок.
EDIT: в ответ на комментарий...
следующий код возвращает собственность.
Примечание: это хорошая идея, чтобы на самом деле сделать вашу собственность сделать что-то, прежде чем пытаться получить его (VS2005) :)
using System.Reflection;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
PropertyInfo[] tmp2 = typeof(TestClass).GetProperties();
PropertyInfo test = typeof(TestClass).GetProperty(
"TestProp",
BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic);
Console.WriteLine(test.Name);
}
}
public class TestClass
{
public Int32 TestProp
{
get
{
return 0;
}
set
{
}
}
}
}
попробуйте добавить следующий тег:
System.Reflection.BindingFlags.Instance
EDIT: это работает (по крайней мере для меня)
PropertyInfo test = typeof(TestClass).GetProperty("TestProp", BindingFlags.Public | BindingFlags.Instance);
Console.WriteLine(test.Name);