我知道它一定被问了两次以上,但我找不到任何适用的问题来回答这个问题。将集合转换为数组的最优化/有效的方法?
我有一个集合,我希望从.NET 2.0中检索数组。换句话说,我想将一个集合转换成一个数组。到目前为止,我有以下几点:
Public Class Set(Of T)
Implements IEnumerable(Of T)
Implements ICollection(Of T)
Implements IEqualityComparer(Of T)
Private _set as Dictionary(Of T, Object)
// Implementing the interfaces here...
Public Function ToArray() As Array
Dim arr As Array = Array.CreateInstance(GetType(T), Me.Count)
Me.CopyTo(arr, 0)
Return arr
End Function
End Class
然后,当我打电话吧,我只需要:
Dim propertiesToLoad As CustomSet(Of String) = New CustomSet(Of String)()
// Initializing my CustomSet here...
Dim searcher As DirectorySearcher = New DirectorySearcher()
Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://" & Environment.UserDomain)
searcher.SearchRoot = entry
searcher.SearchScope = SearchScope.Subtree
searcher.Filter = someFilter
searcher.PropertiesToLoad.AddRange(propertiesToLoad.ToArray())
// Launching search here...
有没有做.NET 2.0中更有效的方式?伯爵
编辑#1
实现和CopyTo从我CustomSet(Of T)已:
Public ReadOnly Property Count As Integer Implements ICollection(Of T).Count
Get
Return _set.Keys.Count
End Get
End Property
Public Sub CopyTo(ByVal array As T, ByVal arrayIndex As Integer) Implements ICollection(Of T).CopyTo
_set.Keys.CopyTo(array, arrayIndex)
End Sub
那,我不知道如何在VB.NET中做。感谢这个建议!至于Count和CopyTo的实现,请参阅我将在编辑#1中提供的代码。谢谢! =) – 2010-07-06 17:34:31
@威尔:看起来很有效。如果你直接在字典中循环而不是使用'Keys'集合,那么稍微改进它可能是可能的,但这很难增加复杂性。 – Guffa 2010-07-06 19:44:20
感谢您的评论和改进痕迹,即使这些由于复杂性而不值得。我很欣赏这些提示。 =) – 2010-07-07 13:08:52