首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FastMember从集合中获取值

使用FastMember从集合中获取值
EN

Stack Overflow用户
提问于 2019-09-24 18:06:41
回答 1查看 262关注 0票数 0

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

代码语言:javascript
复制
// 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
    }
}

对象可能如下所示:

代码语言:javascript
复制
{
Id: 1,
Surname: Doe,
Prename: John,
Professions: [
    { Name: ab },
    { Name: xy }
]
}

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

有什么建议可以解决这个问题吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-24 22:41:18

从这个问题可以看出,source变量的数据类型并不明显,但是您应该能够检查访问器返回的值是否实现了IEnumerable,并采取相应的操作。

这里有一个快速工作的例子,它迭代了一个'Person‘对象的Professions属性,并将ToString()表示转储到控制台--如果你想使用FastMember深入研究每个职业对象,我想你可以构造另一个ObjectAccessor来做这件事--一旦你迭代了,就不清楚你的目标是什么。

如果您直接从数组构建ObjectAccessor,则同样的策略也适用-您只需检查accessor.Target is IEnumerable和强制转换迭代是否以类似的方式进行即可。

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58077868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档