【问题标题】:Get values out of collections with FastMember使用 FastMember 从集合中获取值
【发布时间】:2019-09-24 10:06:41
【问题描述】:

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

// 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 是您的“人”类对象的实例,还是一系列职业?

标签: c# asp.net fastmember


【解决方案1】:

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;
    }
}

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-02-23
    • 2014-07-29
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多