Свойства по отражению
Как получить доступ к свойствам подкласса?, я могу получить доступ к свойствам Y, в данном случае Name, но не к x, другой случай такой же, но вместо единственной ссылки на x со списком x, во втором случае, как выполнить итерацию каждого объекта,
public class X
{
public int ID{get;set;}
public int Name{get;set;}
}
public class y
{
public string Name{get;set;}
public x Reference{get:set;}
}
//second case
public class y
{
public string Name{get;set;}
public List<x> Reference{get:set;}
}
public static void Main()
{
y classY = new y();
y.Name = "some text here";
y.x.ID = "1";
y.x.Name ="some text for x here";
}
// in another class, pass y
// so, in this method I only can get 'y' values, but not x
Hashtable table = new Hashtable();
public void GetProperties(object p)
{
Type mytype = p.GetType();
var properties = mytype.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
table.Add(property.Name, property.GetValue(p, null));
}
}
ОБНОВИТЬ
Также попробуйте с интерфейсом
public interface ISub
{}
public class X : ISub // etc....
if (typeof(ISub).IsAssignableFrom(property.GetType()) ) // this alwas as false
1 ответ
Вам нужно будет оценить каждое свойство, чтобы узнать, является ли оно списком или нет:
foreach (var prop in properties)
{
var obj = prop.GetValue(p, null);
if (obj is List<x>)
{
var list = obj as List<x>;
// do something with your list
}
else
{
table.Add(prop.Name, obj);
}
}