我有一个类对象,如下所示:
Public Class item
Public Property ID
Public Property Name
Public Property Description
Public Property Type
Public Property Alias
End Class
我目前将它们存储为字典,如下所示:
Public Class Items
Public ReadOnly dict Dictionary(Of String, item) From {
{"A", New item With {.Name = "Object A", .Description = "Object A description"}},
{"B", New item With {.Name = "Object B", .Description = "Object B description"}},
{"C", New item With {.Alias = "A"}}
}
Public Function GetItem(ByVal ID As String) As item
Return If(dict.ContainsKey(ID), idct.Item(ID), Nothing)
End Function
End Class
复杂性在于,有时 item
本身没有任何属性,而是具有 .Alias
属性,该属性表示“我的所有属性都与 相同” >item
具有此 ID,请改为检查该对象”。
我应该如何编写我的类对象item
以便此代码返回“Object A”:
Dim newItem As item = GetItem("C")
Debug.WriteLine(item.Name)
对象 C 是对象 A 的别名,因此我应该返回对象 A 的一些属性(并非总是全部),而不是 Nothing
。
解决这个问题的方法是将以下函数添加到 Items
类中:
Public Function GetItemDescription(ByVal ID As String) As String
If dict.ContainsKey(ID) Then
If dict.Item(ID).Description = "" Then
Return GetItemDescription(dict.Item(ID).Alias)
Else
Return dict.Item(ID).Description
End If
Else
Return ""
End If
End Function
但是,这感觉不是正确的方法,因为我必须重复调用一组 Items.GetPropertyXYZ
函数,而不是直接引用对象(例如 item.Description
code> 必须是 GetItemDescription("C")
从设计角度来看,我的解决方案是否可以接受,或者是否有更好的方法来实现这一目标?
最佳答案
试试这个:
Public Function GetItem(ByVal [alias] As String) As item
Return dict.Where(Function(a) a.Key = [alias]).Select(Function(b) b.Value).FirstOrDefault
End Function
编辑 1
当然它会返回“C”项,因为它是错误的。抱歉。
这个有效(已测试):
Public Function GetItem(ByVal ID As String) As item
Dim itm As item = dict.Where(Function(a) a.Key = ID).Select(Function(b) b.Value).FirstOrDefault
Return If(itm IsNot Nothing, If(itm.Alias IsNot Nothing, dict(itm.Alias), itm), Nothing)
End Function
关于vb.net - 引用相同对象类型的另一个对象实例的类对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307375/