vb.net - 引用相同对象类型的另一个对象实例的类对象属性

标签 vb.net

我有一个类对象,如下所示:

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/

相关文章:

vb.net - Visual Basic 可以作为 Windows 服务运行吗?

objective-c - 在 iPad 应用程序上将 VB.Net 生成的日期字符串转换为 NSDate

C#、J# 和 VB.NET 是否可以在每个类中编写一个类并使其变量在一个应用程序中交互?

mysql - 如何使用vb.net将数据保存到mysql数据库

asp.net - 设置一个asp :DropDownList的html 'name'属性

c# - 为什么向我的 WCF 服务操作添加参数会起作用?

.net - 如何使用List.Sort和Comparison(of T)来降序/升序排序?

mysql - 如何使用 VB.NET 在 MySql 中分配空值

c# - 计算不同年份不同日期的平均值

vb.net - ADO - 解析字符串 URL 并使用参数