У меня есть объект Match, структурированный как,
class Match
{
public string location { get; set; }
public List<Team> teams { get; set; }
public Match()
{
location = "Wembley";
teams = new List<Team>();
teams.Add(new Team("Arsenal"));
teams.Add(new Team("Burnley"));
}
}
public class Team
{
public string name { get; set; }
public int score { get; set; }
public Team(string title)
{
name = title;
score = 0;
}
}
Я использую вспомогательный класс для получения значения,
public static class Helper
{
public static object GetPropertyValue(this object T, string PropName)
{
return T.GetType().GetProperty(PropName) == null ? null : T.GetType().GetProperty(PropName).GetValue(T, null);
}
}
Я планирую разрешить пользователю устанавливать значения с помощьюнапример, введите их в графическом интерфейсе как «match.team [1] .name», а затем разделите его на вызов параметра, например, в этом коде;это может идти вниз на несколько слоев.Здесь мы идем вниз по слою, чтобы получить значение свойства от члена списка,
int teamNo = 1;
MessageBox.Show(GetSubProperty(match, "teams", teamNo, "name"));
Моя процедура такова:
private string GetSubProperty(object obj, string prop1, int whichItem, string prop2)
{
var o = obj.GetPropertyValue(prop1);
object subObject = ((List<Team>)o)[whichItem];
return subObject.GetPropertyValue(prop2).ToString();
}
При получении свойства в одной из КомандыОбъекты списка, я должен привести значение к списку перед доступом к отдельному элементу в списке.Я хотел знать, как я мог бы сделать это в общем случае для любого отправляемого типа объекта. Я пробовал List и ArrayList и ряд других вариантов, но получаю ошибку «Невозможно привести объект типа» System.Collections.Generic.List 1[quickTest.Classes.Team]' to type 'System.Collections.Generic.List
1 [System.Object] "