Geo*_*ald 3 vb.net string list
我无法理解这两个命令之间的区别,在我看来这两个命令应该做同样的事情。我已经在下面发布了完整的代码,以防有任何不清楚的地方。
我在 Person 类中创建了两个函数,一个返回包含名字、中间名和姓氏的列表,另一个返回名称的串联字符串。我引用返回列表的函数来将字符串与下面的行连接起来:
FullName = String.Join(" ", Me.Get_NameList())
Run Code Online (Sandbox Code Playgroud)
但是,当我打电话时:
Console.WriteLine(Person1.Print_Name())
Run Code Online (Sandbox Code Playgroud)
我得到的看起来像列表对象而不是字符串:
System.Collections.Generic.List`1[System.String]
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为如下所示:
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
Run Code Online (Sandbox Code Playgroud)
控制台打印:
John Q Doe
Run Code Online (Sandbox Code Playgroud)
为什么我首先将列表分配给变量然后加入它会得到不同的答案?这与列表在内存中的存储方式有关系吗?
先谢谢您的帮助。
这是完整的代码:
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
Run Code Online (Sandbox Code Playgroud)
GetNameList 返回一个对象(因为您没有指定返回类型)。
所以Join方法正在获取一个对象。因此,VB.Net 将 Object 转换为 String(),其中一个元素是 Object.ToString()。有时,该方法(尤其是旧式 VB 保留方法)会检查传递的对象是否是 IEnumerable,然后迭代传递的对象中的对象。但不总是。因此,关闭严格和显式可能会导致非常奇怪且难以发现的错误。这两件事只应该在非常特殊的情况下关闭,在这种情况下,您希望关闭它们可以为您提供所有灵活性,并且您准备好处理由此产生的奇怪情况。
将 Get_NameList 的返回类型更改为 List(Of String)
并打开选项 Strict ON 和 Option Explicit On 查看其他问题。
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |