【问题标题】:Override ToString() for list of custom class为自定义类列表覆盖 ToString()
【发布时间】:2017-11-09 10:43:24
【问题描述】:

我有一个 List(Of clsComponent)。

它被声明为

Private _FilesToDownload As List(Of clsComponent)

我知道如何为一个类覆盖 ToString(),但我不知道如何为 List(Of clsComponent) 覆盖 ToString()。

谁能给我一个提示如何做到这一点?

谢谢。

【问题讨论】:

  • 你不能。覆盖类型成员的唯一方法是声明从其他类型派生的您自己的类型。您没有这样做,因此您无法覆盖该成员或任何其他成员。
  • 另外,目前还不清楚您要达到的目标。您究竟希望输出是什么?为什么您觉得需要重写 ToString 方法来获得它?
  • 我想在一个字符串中打印出所有clsComponent的一些属性。
  • 如果您不创建自己的自定义列表类型,您可能需要考虑向IEnumerable(Of T) 添加新的扩展方法。
  • 那么您的问题应该是“如何从列表中的每个项目中选择某个属性?”

标签: vb.net overriding tostring


【解决方案1】:

你可以,但你需要继承列表(T)
并在那里覆盖 .toString 方法,之后你可以做什么。
在这个示例输出中是

Norbert,Adam,Eva,

一个字符串中所有元素的列表

Sub TestThis()
    Dim Users As New AllUsers(Of User)
    Users.Add(New User With {.Name = "Norbert"})
    Users.Add(New User With {.Name = "Adam"})
    Users.Add(New User With {.Name = "Eva"})
    Debug.Print(Users.ToString)
End Sub

Public Class User
    Property Name As String
    Public Overrides Function ToString() As String
        Return Me.Name
    End Function
End Class
Public Class AllUsers(Of T)
    Inherits List(Of T)
    Public Overrides Function ToString() As String
        Dim Sb As New Text.StringBuilder
        For Each e In Me
            Sb.Append(e.ToString & ",")
        Next
        Return Sb.ToString
    End Function
End Class

【讨论】:

  • 为什么要编写一个完整的类来完成可以通过标准List(Of T) 的单行代码完成的事情? Dim result = String.Join(",", users.Select(Function(s) s.Name).ToArray())
猜你喜欢
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多