我在使用Linq时没有真正的经验,我正在尝试理解.ToHashSet
。
我正在使用VB。
我有这段代码:
' Import the list of Windows Classes to exclude; one per line.
Dim strRead As String = My.Computer.FileSystem.ReadAllText("C:\Exclude.txt")
' Split the string into a string array
Dim strExcludes As String() = strRead.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
' Convert the String Array to a HashSet (Traditional Method)
Dim lList As New HashSet(Of String)(strExcludes)
这是按预期工作的;我将文本文件中的每一行都放到HashSet中,每行一行。
现在,我想看看如何使用.ToHashSet
执行相同操作。下面的代码似乎工作得很好,除了它返回类型<Of Char>
,所以我得到它中的每个字符自己的密钥,而不是它自己的密钥中的每一行。
' Convert the String Array to a HashSet (Using System.Linq Method) (Unfinished: Works, but needs to be converted from Char to String)
Dim lListLinq = strRead.ToHashSet()
我用谷歌搜索了一下,并尝试了一下,试图让它返回类型为<Of String>
,但没有太多谷歌信息用于.ToHashSet
的VB,或者真的很多在C#中关于这个特殊问题。我没有看到转换的位置; .ToHashSet
本身也不接受任何论据。
任何人都知道我错过了什么?我觉得这是一件非常简单的滑倒的事情。
答案 0 :(得分:1)
在字符串上调用ToHashSet()
会产生HashSet(Of Char)
,并且不会在您目击后提供预期结果。
相反,您需要做的是拆分ReadAllText
返回的字符串,然后在其上调用ToHashSet()
以获得HashSet(Of String)
。
strRead.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToHashSet()