vb.net - 为什么 string.join 在 VB.Net 中返回列表对象

标签 vb.net string list

我无法理解这两个命令之间的区别,在我看来这两个命令应该做同样的事情。我已经在下面发布了完整的代码,以防有任何不清楚的地方。

我在 Person 类中创建了两个函数,一个返回包含名字、中间名和姓氏的列表,另一个返回名称的串联字符串。我引用返回列表的函数来将字符串与下面的行连接起来:

FullName = String.Join(" ", Me.Get_NameList())

但是,当我打电话时:

Console.WriteLine(Person1.Print_Name())

我得到的内容看起来像列表对象而不是字符串:

System.Collections.Generic.List`1[System.String]

如果我将代码更改为如下所示:

    Public Function Print_Name()
        Dim FullNameList As List(Of String) = Me.Get_NameList()
        Dim FullName As String
        FullName = String.Join(" ", FullNameList)
        Return FullName
    End Function

控制台打印:

John Q Doe

为什么我先将列表分配给变量然后加入它会得到不同的答案?这与列表在内存中的存储方式有关系吗?

预先感谢您的帮助。

完整代码如下:

Imports System
Module Module1
    Sub Main()
        Dim Person1 As New Person("John", "Q", "Doe")
        Console.WriteLine("Get_Name Values")
        Dim g1 As List(Of String) = Person1.Get_NameList()
        Console.WriteLine(String.Join(" ", g1))
        Console.WriteLine("Print_Name Values")
        Console.WriteLine(Person1.Print_Name())
    End Sub
End Module

Class Person
    Private FirstName As String
    Private MiddleName As String
    Private LastName As String
    Public Sub New(ByVal Fn As String, ByVal Mn As String, ByVal Ln As String)
        FirstName = Fn
        MiddleName = Mn
        LastName = Ln
    End Sub
    Public Function Get_NameList()
        Dim NameList As New List(Of String)
        NameList.Add(FirstName)
        NameList.Add(MiddleName)
        NameList.Add(LastName)
        Return NameList
    End Function
    Public Function Print_Name()
        'Dim FullNameList As List(Of String) = Me.Get_NameList()
        Dim FullName As String
        FullName = String.Join(" ", Me.Get_NameList())
        Return FullName
    End Function
End Class

最佳答案

GetNameList 返回一个对象(因为您没有指定返回类型)。

所以 Join 方法正在获取一个对象。因此,VB.Net 将 Object 转换为 String(),其中一个元素是 Object.ToString()。有时,该方法(尤其是旧式 VB 保留方法)会检查传递的对象是否是 IEnumerable,然后迭代传递的对象中的对象。但不总是。因此,关闭严格和显式可能会导致非常奇怪且难以发现的错误。仅在非常特殊的情况下才应该关闭这两件事,在这种情况下,您希望关闭它们可以为您提供所有灵 active ,并且您已准备好处理由此产生的奇怪情况。

将 Get_NameList 的返回类型更改为 List(Of String)

然后打开选项 Strict ON 和 Option Explicit On 查看其他问题。

关于vb.net - 为什么 string.join 在 VB.Net 中返回列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467763/

相关文章:

string - 如何将字符串截断为最多 N 个字符?

java - If 语句不适用于字符串

javascript - 如何将 gridview 内的复选框 id 从 vb.net 传递到 javascript

c# - 在 C# 中使用 vb.net 类

vb.net - 根据 GroupBox 的复选框设置 CheckBox 已选中

php - 如何将 PascalCase 转换为 snake_case?

list - 从 Haskell 中的列表中获取随机样本而不替换的更好方法

Python:对列表进行排序

java - Java中的快速有序列表匹配算法

vb.net - 如何确定函数定义中类的类型?