动态对象上的方法成员访问调用TryGetMember

时间:2015-02-06 16:25:47

标签: c# .net reflection types expandoobject

我有一个自定义动态对象,它在内部只是一个字典,但允许访问它的值,就好像它们是编译时属性一样。

它(或多或少)就是这样:

public class Dummy : DynamicObject, IEnumerable<KeyValuePair<string, object>>
{
    private readonly Dictionary<string, object> _values...

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = _values[binder.Name];
        return true;
    }
    ...

设置和获取&#39;属性&#39;工作正常,但由于我的对象在技术上实现IEnumerable<'1>,我想在其上调用IEnumerable<'1>的方法。

然而,无论何时我打电话,例如Count()TryGetMember被调用,这当然没有意义:

The key 'Count()' was not present in the dictionary.

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

简单地说,您不能使用普通语法对动态对象使用扩展方法。你可以使用Enumerable.Count(dummyInstance);,但我怀疑这是你想要的。

有关详细信息,请参阅[Extension method and dynamic object