Из вопроса о том, что является типом данных переменной source
, не очевидно, но вы должны просто иметь возможность проверить, реализует ли значение, возвращаемое средством доступа, IEnumerable
или нет, и действовать соответствующим образом.
Вот быстрый пример, который перебирает свойство Professions объекта Person и просто выводит представление ToString()
на консоль - если вы хотите погрузиться в каждый объект Profession, используя FastMember, вы можете создать еще один ObjectAccessor
длясделайте это, я полагаю - неясно, какова ваша цель после итерации.
Та же тактика будет работать, если вы создаете ObjectAccessor
непосредственно из массива - вы просто проверяете, если accessor.Target is IEnumerable
и выполняйте приведение и повторение аналогичным образом.
class Program
{
static void Main(string[] args)
{
var p = new Person
{
Professions = new List<Profession>
{
new Profession("Joker"),
new Profession("Smoker"),
new Profession("Midnight toker")
}
};
var accessor = ObjectAccessor.Create(p);
var professions = accessor[nameof(Person.Professions)];
if (professions is IEnumerable)
{
foreach (var profession in (IEnumerable)professions)
{
Console.WriteLine(profession);
}
}
}
}
class Person
{
public List<Profession> Professions { get; set; }
}
class Profession
{
public string Name { get; set; }
public Profession( string name)
{
Name = name;
}
public override string ToString()
{
return Name;
}
}