Как я могу теперь получить список, полученный с помощью Type.GetProperties(), если свойства определены пользователем?Недвижимость определяется пользователем?
Например
class test
{
public string propertyOne{get;set;}
public string propertyTwo{get;set;}
}
С typeof(test).GetProperties()
я получаю два PropertyInfo, как я могу теперь они определены пользователем?
Информация о контексте, вот тест, который должен пройти
[Test]
public void GetFullNameScalarPropertiesTest()
{
// Act
var properties = ReflectionHelper.GetFullNameScalarProperties(typeof(Parent));
// Assert
Assert.True(properties.Contains("PropertyOne"));
Assert.True(properties.Contains("Child.PropertyTwo"));
Assert.True(properties.Contains("Child.GrandChild.PropertyThree"));
Assert.That(properties.Count, Is.EqualTo(3));
}
class Parent
{
public Parent()
{
Child = new Child();
}
public string PropertyOne { get; set; }
public Child Child { get; set; }
}
class Child
{
public Child()
{
GrandChild = new GrandChild();
}
public string PropertyTwo { get; set; }
public GrandChild GrandChild { get; set; }
}
class GrandChild
{
public string PropertyThree { get; set; }
}
Таким образом, в рекурсивном методе я получаю свойства и создание списка с именами
ATM код, который проходит этот тест равен
public static IList<string> GetFullNameScalarProperties(Type type)
{
var lista = new List<string>();
var path = string.Empty;
var properties = type.GetProperties();
foreach (var propertyInfo in properties)
GetFullNameScalarProperties(propertyInfo, path, lista);
return lista;
}
private static void GetFullNameScalarProperties(PropertyInfo propertyInfo, string path, ICollection<string> lista)
{
if (!string.IsNullOrEmpty(path))
path += ".";
path += propertyInfo.Name;
if (propertyInfo.PropertyType.FullName != null)
if (propertyInfo.PropertyType.FullName.StartsWith("System"))
{
lista.Add(path);
return;
}
var properties = propertyInfo.PropertyType.GetProperties();
foreach (var pi in properties)
GetFullNameScalarProperties(pi, path, lista);
}
пользователь определил? вы имеете в виду не наследуемые или не переопределенные? –
Я попробую уточнить, что мне нужно –
Ваше обновление все еще не очень ясно. Тем не менее, некоторые догадки: вы ищете разумный способ определить, имеет ли свойство тип, относящийся к набору некоторых конкретных типов *, чтобы решить в 'GetFullNameScalarProperties', следует ли переходить к типу конкретного объекта и проверить его свойства. Правильно? –