gpt4 book ai didi

c# - 在 C# 中重载 [][]

转载 作者:行者123 更新时间:2023-11-30 18:53:22 24 4
gpt4 key购买 nike

我正在构建一个基于树的数据结构并重载 [ ] 这样我就可以说

node["key1", "key2", "key3"]

它返回其父节点 1、2 和 3 层以上是具有这些键的节点的节点。节点在概念上映射到一个数据数组,所以我现在拥有的是这个函数:

node[keys...].SetValue(i, value)

设置节点数据中的第 i 个值。如果我能做到这一点就好了:

node[keys][i] = value

问题是,node[keys] 返回一个节点,所以 [i] 索引试图到达另一个节点。基本上我想做的是将“[ ][ ]”作为运算符重载,但我做不到。

有什么方法可以实现我想要做的事情吗?

最佳答案

注意:这个答案讨论了实现类似 obj[a][b][c]... 的东西,它可以使用可变数量的括号。看来这并不是 OP 想要的

你不能直接重载它。您应该从第一个索引器返回一个带有索引器的对象,以便您可以模拟此功能。
模拟 set 有点难,但可以这样做:

public class Node<T> {
public Node<T> this[string key] {
get { return GetChildNode(key); }
set {
if (value is DummyNode<T>) {
GetChildNode(key).Value = value.Value;
} else {
// do something, ignore, throw exception, depending on the problem
}
}
}
public static implicit operator T(Node<T> value) {
return value.Value;
}
private class DummyNode<T> : Node<T> {
}
public static implicit operator Node<T>(T value) {
return new DummyNode<T> { Value = value };
}
public T Value { get; set; }
}

关于c# - 在 C# 中重载 [][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1064565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com