我正在制作一个程序,当输入元素的化学符号时,它会将该元素的信息返回到表单上。这很简单,但它希望尽可能保持我的代码效率。
我的字典:
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
。
如果我的描述没有意义,请告诉我,我会尝试解释我的意思。
答案 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