2

私は辞書と辞書内の新しいファンシー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をマップする他の2つのクラスを作成しましたが、それらは実質的に同じであるため、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()

代わりに(インテリセンスで)これを実行できるようにしたいと思います...

a.Children
a.Name
a.HasParent

等...

誰かが私が間違っているところについて何か考えを持っていますか?

おっと、それは完全に間違っていました...ごめんなさい:| 上で編集...

4

1 に答える 1

1

dynamicクラスはすべて、実行時(コンパイル時ではない)の検出に関するものです。Intellisenseが何をすべきかをどのように知っていると思いますか?

クラスを使用dynamicすると、高いパフォーマンスのオーバーヘッドが発生します。私は本当にあなたがそれを作ることを提案します:Dictionary<string, dynamic> dynamicDic

または、を定義しMyBaseClassて作成しますDictionary<string, MyBaseClass> myDic

于 2012-11-26T14:40:44.407 に答える