我有一个看起来像这样的类对象:
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
复杂性在于,有时anitem
本身将不会具有任何属性,而是具有一个.Alias
属性,该属性表示“我的所有属性都item
与此ID相同,请改为检查该对象”。
我应该如何编写我的类对象,item
以便此代码返回“对象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
,必须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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句