Я пытаюсь получить коллекцию строк, которые дают мне имена полей всех моих учеников, разделенные .
с.Например:
public class Apple
{
public Banana MyBanana = new Banana();
public Cranberry MyCranberry = new Cranberry();
}
public class Banana
{
public int MyNumber = 5;
public Cranberry MyCranberry = new Cranberry();
}
public class Cranberry
{
public string MyString = "Hello!";
public int MyOtherNumber = 10;
}
public class Demo
{
public List<string> GetFields(Type Apple)
{
//I can't figure this out
//But it should return a list with these elements:
var result = new List<string>
{
"MyBanana.MyNumber",
"MyBanana.MyCranberry.MyString",
"MyBanana.MyCranberry.MyOtherNumber",
"MyCranberry.MyString",
"MyCranberry.MyOtherNumber"
};
return result;
}
}
Я считаю, что требуется некоторая рекурсия и рефлексия, но после написания недействующего кода в течение нескольких часов мне нужна помощь.
Причина, по которой мне это нужно, заключается в том, чтоЯ обращаюсь к стороннему коду, который использует эти пути к файлам в качестве ключа к соответствующим значениям.
Пример одной неудачной попытки:
private List<string> GetFields(Type type)
{
var results = new List<string>();
var fields = type.GetFields();
foreach (var field in fields)
{
string fieldName = field.Name;
if (field.ReflectedType.IsValueType)
{
results.Add(fieldName);
}
else
{
results.Add(field.Name + GetFields(field.FieldType));
}
}
return results;
}
Я нашел несколько связанных вопросов, но ни одногоиз них точно соответствуют моему вопросу, и я не смог сделать прыжок сам: Рекурсивно получить свойства и дочерние свойства класса , https://stackoverflow.c"om/questions/6196413/how-to-recursively-print-the-values-of-an-objects-properties-using-reflection, Рекурсивно получить свойства и дочерние свойства AnОбъект , .NET, C #, Reflection: перечислить поля поля, которое само имеет поля