C# - 从字典中获取值 - 对象的返回属性?

时间:2018-02-23 16:19:36

标签: c# object dictionary casting key

我正在制作一个程序,当输入元素的化学符号时,它会将该元素的信息返回到表单上。这很简单,但它希望尽可能保持我的代码效率。

我的字典:

Dictionary<string, object> alkaliM = new Dictionary<string, object>();

在我的代码中也是:

alkaliM.Add("Li", new AlkaliMetals.Lithium());

elementSymbol是我在文本框中的输入字符串

我试图将elementName.Text设置为属性&#34; name&#34;我的AlkaliMetals.Lithium对象。但是,我不能简单地说:

elementName.Text = alkaliM[elementSymbol.Text];因为我无法将对象设置为字符串。 (&#34; Cannot implicty convert type "object" to "string"&#34)

有没有办法只使用密钥将elementName.Text设置为AlkaliMetals.Lithium.name

我有一个单独的文件,它有一个主类AlkaliMetals和每个碱金属的子类,如Lithium

如果我的描述没有意义,请告诉我,我会尝试解释我的意思。

2 个答案:

答案 0 :(得分:3)

你可以让AlkaliMetals.cs中的所有子类实现一个抽象类CommonAbstractClass 拥有财产name

将字典定义为Dictionary<string, CommonAbstractClass>

然后按照以下elementName.Text = alkaliM[elementSymbol.Text].name;

使用您的字典

答案 1 :(得分:0)

您可以使用动态广告来找到name属性(,如果您确定它存在):

elementName.Text = (alkaliM[elementSymbol.Text] as dynamic).name

但是,更有效的方法是Object Oriented Design

定义名为ChemicalElement的类,向其添加name属性,然后从Lithium派生ChemicalElement。这样你就可以写:

elementName.Text = (alkaliM[elementSymbol.Text] as ChemicalElement).name

最佳解决方案是定义您的字典:

Dictionary<string, ChemicalElement> alkaliM = new Dictionary<string, ChemicalElement>();

然后访问name,如:

elementName.Text = alkaliM[elementSymbol.Text].name