使用 FastMember 从集合中获取值

拉斐尔

我使用 FastMember 从对象和嵌套对象中获取值。如果属性是 astringint一切正常。但是现在我也想获取集合的值。到目前为止,这是我的代码:

// Set accessor
var sourceAccessor = ObjectAccessor.Create(source);

if (sourceAccessor.Target.GetType().GetInterface(nameof(ICollection)) != null || sourceAccessor.Target.GetType().GetInterface(nameof(IEnumerable)) != null)
{
    foreach (/* idk */)
    {
        // READ & RETURN VALUES HERE
    }
}

一个对象可能如下所示:

{
Id: 1,
Surname: Doe,
Prename: John,
Professions: [
    { Name: ab },
    { Name: xy }
]
}

这意味着职业会导致问题。

任何建议我如何解决这个问题?谢谢!

帕布利西莫

source变量的数据类型是什么的问题中并不明显,但您应该能够检查访问器返回的值是否实现IEnumerable并采取相应的行动。

这是一个快速工作的示例,它遍历“Person”对象的 Professions 属性,然后将ToString()表示转储到控制台 - 如果您想使用 FastMember 深入了解每个 Profession 对象,您可以构造另一个对象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;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章