在c#中重载[][]
我正在构建一个基于树的数据结构并重载 [ ],以便我可以说它
node["key1", "key2", "key3"]
返回其父级 1、2 和 3 级以上的节点是具有这些键的节点。 节点在概念上映射到数据数组,所以我现在拥有的是这个函数:
node[keys...].SetValue(i, value)
它设置节点数据中的第 i 个值。 如果我能这样做就好了:
node[keys][i] = value
问题是,node[keys] 返回一个节点,因此 [i] 索引尝试获取另一个节点。 基本上我想要做的是将“[][]”重载为运算符,但我做不到。
有什么办法可以实现我想做的事情吗?
I'm building a tree-based data structure and overloaded [ ] so that I can say
node["key1", "key2", "key3"]
which returns the node whose parents 1, 2, and 3 levels above are the nodes with those keys. the nodes conceptually map to an array of data, so what I have now is this function:
node[keys...].SetValue(i, value)
which sets the i-th value in the node's data. what would be nice is if I could do this:
node[keys][i] = value
problem is, node[keys] returns a node, so the [i] indexing tries to get at another node. basically what I want to be able to do is overload "[ ][ ]" as an operator, which I can't.
is there any way to get at what I'm trying to do?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
注意:这个答案讨论了实现类似
obj[a][b][c]...
的东西,可以使用可变数量的括号。 看来这并不完全是OP想要的。你不能直接超载它。 您应该从第一个索引器返回一个带有索引器的对象,以便可以模拟此功能。
模拟 set 有点困难,但可以执行以下操作:
Note: This answer talks about implementing something like
obj[a][b][c]...
that could work with variable number of brackets. It seems it's not exactly what the OP wanted.You can't overload that directly. You should return an object with an indexer from the first indexer so that you could simulate this functionality.
It's a bit harder to simulate
set
but it's possible to do something like:看来我只需要多做一些修改来弄清楚...我创建了第二个重载:
现在让我可以这样做
:)
seems I just needed to tinker a bit more to figure it out...I created a second overload:
which now lets me do
:)
魔法课很有趣...
Magic classes are fun...