如何解决如何使用自定义结构代替KeyValuePair?
| 是否可以使用自定义结构代替KeyValuePair? 代替For Each kvp As KeyValuePair(Of class1,class2) In myDict
Dim c1 As kvp.Key
Dim c2 As kvp.Value
Next
我想用
For Each kvp As myKvp In myDict
Dim c1 As kvp.P1
Dim c2 As kvp.P2
Next
我只想使用myKvp代替KeyValuePair(Class1,class2)(不适用于其他类型)。
我尝试将myKvp创建为
Public Structure myKvp
Public P1 As class1
Public P2 As class2
Public Sub New(_p1 As class1,_p2 As class2)
P1 = _p1
P2 = _p2
End Sub
End Structure
但我收到消息
System.Collections.Generic.KeyValuePair(Of ASP...class1,ASP...class2)
类型的值不能转换为\'ASP ... myKvp \'。
解决方法
您需要显式创建
myKvp
的实例。您可以使用Linq轻松完成此操作:
For Each kvp As myKvp In myDict.Select(Function(x) New myKvp(x.Key,x.Value))
Dim c1 = kvp.P1
Dim c2 = kvp.P2
Next
,可以使用列表或任何其他常规集合来代替字典。词典需要KeyValuePair作为其收集项。
更新:
您可以创建自己的类来继承实际的Dictionary<T,S>
对象,并公开其名称比Key
和Value
更有意义的公共属性,而这些公共属性只是指向基础Dictionary
\'sKey
和Value
的指针。您仍将保留基础Dictionary的所有功能。
希望能帮助到你。
,简短而-脚的答案是:不会。
当两个结构具有相同的布局时,编译器将在您主动声明希望将其视为两个截然不同的事物时解释定义myKvp的行为(而不是使用通用的KeyValuePair)。毕竟,如果您想要的是KeyValuePair(Of TKey,TValue),那么为什么不只使用KeyValuePair(Of TKey,TValue)呢?
但是,您可以通过为您的自定义类型实现CType()来解决它。但这与告诉编译器将myKvp视为KeyValuePair(Class1,Class2)的别名完全不同-而是告诉编译器在需要时可以获取所有数据从一个类的实例中删除,然后使用提供的CType()函数将其拔出另一个类的新实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。