字典<dynamic,dynamic =“”>无法访问值项。 C#</动态,>

时间:2012-11-26 14:29:33

标签: c# dynamic dictionary

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

我有一个词典:

Dictionary<dynamic, dynamic> dynamicDic

我这样填充:

dynamicDic.Add("First", new Class1());
dynamicDic.Add("Second", new Class2());

为了测试/练习Class1和Class2非常简单:

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

我创建了另外两个映射class1和class2的类,它们实际上是相同的ClassMap1和ClassMap2。我只会包括CalssMap1:

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

我创建了一个基类:BaseClass1()

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

我使用数据填充类,而不是真正重要的数据:)

然而,当我尝试通过Linq语句访问这些​​值时:

var a = _classObjects.SingleOrDefault(x => x.Key == node.Name).Value;

只给了我一个: -

a.Equals(), a.GetType(), a.GetEnumerator() or a.ToString()

我希望能够做到这一点(使用intellisense)......

a.Children
a.Name
a.HasParent

等...

任何人都有任何想法我会出错?

哎呀完全错了......对不起:| 以上编辑......

1 个答案:

答案 0 :(得分:1)

dynamic类都是关于运行时( NOT 编译时)发现的。您如何期待Intellisense知道该怎么做?

使用dynamic类会产生高性能开销。我真的建议你做到:Dictionary<string, dynamic> dynamicDic

或者定义MyBaseClass并制作它:Dictionary<string, MyBaseClass> myDic