[英]C# - Get value from dictionary with key - return property of object?
我正在制作一個程序,當輸入一個元素的化學符號時,它會將該元素的信息返回到表單上。 這很容易做到,但它希望盡可能保持我的代碼高效。
我的字典:
Dictionary<string, object> alkaliM = new Dictionary<string, object>();
在我的代碼中也:
alkaliM.Add("Li", new AlkaliMetals.Lithium());
elementSymbol
是我從文本框中輸入的字符串
我正在嘗試將elementName.Text
設置為我的AlkaliMetals.Lithium
對象的屬性“ name
”。 但是,我不能簡單地說:
elementName.Text = alkaliM[elementSymbol.Text];
因為我無法將對象設置為字符串。 (" Cannot implicty convert type "object" to "string"
")
有什么方法可以僅使用密鑰將elementName.Text
設置為AlkaliMetals.Lithium.name
嗎?
我有一個單獨的文件,它有一個主類AlkaliMetals
和每個鹼金屬(如Lithium
子類。
如果我的描述沒有意義,請告訴我,我會盡力解釋我的意思。
您可以讓 AlkaliMetals.cs 中的所有子類實現一個具有屬性name
的抽象類CommonAbstractClass
將您的字典定義為Dictionary<string, CommonAbstractClass>
然后使用你的字典如下elementName.Text = alkaliM[elementSymbol.Text].name;
您可以使用動態轉換找到name
屬性(如果您絕對確定它存在):
elementName.Text = (alkaliM[elementSymbol.Text] as dynamic).name
但是,更有效的方法是Object Oriented Design
:
定義一個名為ChemicalElement
的類,為其添加name
屬性,然后從ChemicalElement
派生Lithium
。 這樣你可以寫:
elementName.Text = (alkaliM[elementSymbol.Text] as ChemicalElement).name
最好的解決方案是像這樣定義你的字典:
Dictionary<string, ChemicalElement> alkaliM = new Dictionary<string, ChemicalElement>();
然后訪問name
如:
elementName.Text = alkaliM[elementSymbol.Text].name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.