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

C# 对动态对象的方法成员访问调用TryGetMember,c#,.net,reflection,types,expandoobject,C#,.net,Reflection,Types,Expandoobject,我有一个自定义动态对象,它在内部只是一个字典,但允许访问它的值,就好像它们是编译时属性一样 这(或多或少)只是: public class Dummy : DynamicObject, IEnumerable<KeyValuePair<string, object>> { private readonly Dictionary<string, object> _values... public override bool TryGetMemb

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

这(或多或少)只是:

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

有办法解决这个问题吗?

简单地说,您不能使用常规语法对动态对象使用扩展方法。您可以使用
Enumerable.Count(dummyInstance)

请参阅[了解详细信息。

我无法复制您的问题。您能说明如何调用
Count()
?另外,
Count
不是
IEnumerable
上的一个方法-它是一个扩展方法,编译器将其转换为对静态方法
Enumerable.Count的调用。我不太确定我是否理解正确。我一直认为扩展方法只是转换为静态方法调用的语法糖当成员作为第一个参数被调用时,那么list.Count()就变成了Enumerator.Count(list)编译后,这与实例是动态的、对象的或其他什么都没有关系?是的,确切地说,这是语法上的糖分。这意味着它是在编译时完成的。编译器似乎应该知道您正在实例化一个伪类,因此应该在编译期间将动态对象视为IEnumerable但它实际上并没有这样做,因此它不知道调用哪个静态方法。这有意义吗?
The key 'Count()' was not present in the dictionary.