将字典属性作为对象访问
Access Dictionary properties as Object
我有这个类:
public class Class1
{
public Dictionary<string, Class2> Items { get; set; }
}
public class Class2
{
public string Code { get; set;}
public string Name { get; set; }
}
还有这个
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
c.Items = new Dictionary<string, Class2>();
c.Items.Add("Item0001", new Class2() { Code = "0001", Name = "Item ABC" });
c.Items.Add("Item0002", new Class2() { Code = "0002", Name = "Item XYZ" });
}
}
我想知道的(我已经在谷歌上搜索过了,但我找不到相关信息)是,是否有一种方法可以使用 Intellisense 或类似的东西访问像这样的对象。
c.Items.Item0001.Code
Intellisense 不会在这件事上帮助您,因为您的字典项是在运行时定义的,因此在编译时没有关于此的信息。
但是您可以使用 ExpandoObject
和 dynamic
;
dynamic foo = new ExpandoObject();
foo.Item0001 = new Class1();
foo.Item0002 = new Class1();
var asDict = (IDictionary<string, object>)foo;
var item1 = asDict["Item0001"];
我有这个类:
public class Class1
{
public Dictionary<string, Class2> Items { get; set; }
}
public class Class2
{
public string Code { get; set;}
public string Name { get; set; }
}
还有这个
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
c.Items = new Dictionary<string, Class2>();
c.Items.Add("Item0001", new Class2() { Code = "0001", Name = "Item ABC" });
c.Items.Add("Item0002", new Class2() { Code = "0002", Name = "Item XYZ" });
}
}
我想知道的(我已经在谷歌上搜索过了,但我找不到相关信息)是,是否有一种方法可以使用 Intellisense 或类似的东西访问像这样的对象。
c.Items.Item0001.Code
Intellisense 不会在这件事上帮助您,因为您的字典项是在运行时定义的,因此在编译时没有关于此的信息。
但是您可以使用 ExpandoObject
和 dynamic
;
dynamic foo = new ExpandoObject();
foo.Item0001 = new Class1();
foo.Item0002 = new Class1();
var asDict = (IDictionary<string, object>)foo;
var item1 = asDict["Item0001"];