簡體   English   中英

C# - 使用鍵從字典中獲取值 - 返回對象的屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM