VB.NET跨平台非Linq场景:通用字典键转逗号分隔字符串实现方案
VB.NET通用字典键转逗号分隔字符串方案
针对你遇到的问题,这里提供两种简便的实现方案,均无需依赖Linq:
方案一:泛型方法(直接适配Dictionary)
通过定义泛型方法,兼容任意值类型的Dictionary(Of Integer, T):
Imports System.Text Imports System.Collections.Generic Public Module DictionaryHelper Public Function GetCommaSeparatedKeys(Of T)(ByVal dict As Dictionary(Of Integer, T)) As String If dict Is Nothing OrElse dict.Count = 0 Then Return String.Empty End If Dim sb As New StringBuilder() Dim isFirstItem As Boolean = True For Each key As Integer In dict.Keys If Not isFirstItem Then sb.Append(",") End If sb.Append(key.ToString()) isFirstItem = False Next Return sb.ToString() End Function End Module
使用示例
' 针对Accounts字典 Dim accountsDict As New Dictionary(Of Integer, Accounts)() ' 填充字典数据... Dim accountKeysStr As String = DictionaryHelper.GetCommaSeparatedKeys(accountsDict) ' 针对Users字典 Dim usersDict As New Dictionary(Of Integer, Users)() ' 填充字典数据... Dim userKeysStr As String = DictionaryHelper.GetCommaSeparatedKeys(usersDict)
方案二:通用整数序列处理方法(更灵活)
利用Dictionary(Of Integer, T).Keys实现IEnumerable(Of Integer)的特性,编写一个处理任意整数序列的通用方法,适用场景更广:
Imports System.Text Imports System.Collections.Generic Public Module StringHelper Public Function GetCommaSeparatedIntegers(ByVal items As IEnumerable(Of Integer)) As String If items Is Nothing Then Return String.Empty End If Dim sb As New StringBuilder() Dim isFirstItem As Boolean = True For Each item As Integer In items If Not isFirstItem Then sb.Append(",") End If sb.Append(item.ToString()) isFirstItem = False Next Return sb.ToString() End Function End Module
使用示例
' 直接传入字典的Keys集合 Dim accountKeysStr As String = StringHelper.GetCommaSeparatedIntegers(accountsDict.Keys) Dim userKeysStr As String = StringHelper.GetCommaSeparatedIntegers(usersDict.Keys)
关于你之前尝试的问题说明
Dictionary(Of Integer, Accounts)无法转换为Dictionary(Of Integer, Object):这是因为.NET的泛型字典是不变类型,不支持协变转换(即不能将Dictionary(Of TKey, TDerived)转换为Dictionary(Of TKey, TBase))。Keys返回的KeyCollection类型问题:每个Dictionary(Of Integer, T)对应的KeyCollection是独立的嵌套泛型类型,但它们都实现了IEnumerable(Of Integer)接口,因此可以通过该接口实现统一处理。
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

