我正在使用字典和字典中新的奇特的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
等...
任何人都有任何想法我会出错?
哎呀完全错了......对不起:| 以上编辑......答案 0 :(得分:1)
dynamic
类都是关于运行时( NOT 编译时)发现的。您如何期待Intellisense知道该怎么做?
使用dynamic
类会产生高性能开销。我真的建议你做到:Dictionary<string, dynamic> dynamicDic
。
或者定义MyBaseClass
并制作它:Dictionary<string, MyBaseClass> myDic
。