字典<;动态,动态>;价值项目可以';无法访问。C#

字典<;动态,动态>;价值项目可以';无法访问。C#,c#,dynamic,dictionary,C#,Dynamic,Dictionary,我正在玩字典和字典中新的奇特的4.0动态类型 我有一本字典: Dictionary<dynamic, dynamic> dynamicDic 为了测试/练习,1级和2级非常简单: public class Class1 { public string Element { get; set; } public List<Class2> Class2 { get; set; } } public class Class2 { public str

我正在玩字典和字典中新的奇特的4.0动态类型

我有一本字典:

Dictionary<dynamic, dynamic> dynamicDic
为了测试/练习,1级和2级非常简单:

public class Class1
{
    public string Element { get; set; }

    public List<Class2> Class2 { get; set; }
}

public class Class2
{
    public string Property { get; set; }

    public string Field;
}
a只给了我:-

a.Equals(), a.GetType(), a.GetEnumerator() or a.ToString()
我希望它能做到这一点,而不是(与intellisense)

等等

有人知道我哪里出错了吗

哎呀,这完全错了。。。对不起:|
以上编辑…

动态
类都是关于运行时(而不是编译时)发现的。你如何期望Intellisense知道该做什么

使用
动态
类会导致高性能开销。我真的建议你做到:
字典动态


或者定义一个
MyBaseClass
并使其成为:
Dictionary myDic

您正在调用
Class1
无参数构造函数作为
Class1
无参数构造函数的第一行。那不会有好结果的。就智能感知而言,这些值只会在执行时填充。不清楚您希望Intellisense如何在构建时知道要做什么。您使用的是
字典
,因此
a
的类型将是
动态
。您无法在
动态
变量上获取intellisense,因为编译器不知道运行时类型是什么。DOH!那是你在Class1()构造函数中调用的“var r=new Class1();”的荷马·辛普森时刻。。。看起来像是堆栈溢出。我认为Intellisense不会与dynamic一起工作。Richard将其称为上面的,然后另一个Richard将其称为下面的。谢谢各位。现在我如何给你一些代表性?是的,用字符串代替动态键很好。我只是在玩弄向字典中添加内容的不同方法,在我认为它只是一个字符串之前,dynamic首先出现了:)根据它的用途使用该工具。不要仅仅因为它方便就使用它<代码>动态
功能非常强大,在某些情况下非常强大,但不应该每天都使用。我们必须在某个地方学习。学习是一种日复一日的情况。你是对的。我对上述评论表示歉意。学习总是值得鼓励的。
public class ClassMap1: BaseClassMap1
{
    public ClassMap1()
    {
        var r = new Class1();
        Children = new Dictionary<string, dynamic>
            {
                {"Element", r.GetType().GetProperty("Element")},
                {"Class1", r.GetType().GetProperty("Class1")}
            };
        Name = "Root";
        ObjectType = typeof (Class1);
        Parent = "RootElement";
        HasParent = false;
        HasChildren = true;
        IsClass = r.GetType().IsClass;
    }
}
public class BaseClass1
{
    private String _Name;

    public String Name
    {
        get { return _Name; }
        set { _Name = value; }
    }

    private Type _ObjectType;

    public Type ObjectType
    {
        get { return _ObjectType; }
        set { _ObjectType = value; }
    }

    private String _Parent;

    public String Parent
    {
        get { return _Parent; }
        set { _Parent = value; }
    }

    private Dictionary<string, dynamic> _Children;

    public Dictionary<string, dynamic> Children
    {
        get { return _Children; }
        set { _Children = value; }
    }

    private bool _HasParent;

    public bool HasParent
    {
        get { return _HasParent; }
        set { _HasParent = value; }
    }

    private bool _HasChildren;

    public bool HasChildren
    {
        get { return _HasChildren; }
        set { _HasChildren = value; }
    }

    private bool _IsClass;

    public bool IsClass
    {
        get { return _IsClass; }
        set { _IsClass = value; }
    }
}
var a = _classObjects.SingleOrDefault(x => x.Key == node.Name).Value;
a.Equals(), a.GetType(), a.GetEnumerator() or a.ToString()
a.Children
a.Name
a.HasParent