toa*_*ven 2 c# operator-overloading
我正在建立一个基于树的数据结构并重载[]以便我可以说
node["key1", "key2", "key3"]
Run Code Online (Sandbox Code Playgroud)
返回其父级1,2和3级以上是具有这些键的节点的节点.节点在概念上映射到数据数组,所以我现在拥有的是这个函数:
node[keys...].SetValue(i, value)
Run Code Online (Sandbox Code Playgroud)
它设置节点数据中的第i个值.如果我能做到这一点会有什么好处:
node[keys][i] = value
Run Code Online (Sandbox Code Playgroud)
问题是,node [keys]返回一个节点,因此[i]索引尝试获取另一个节点.基本上我想要做的是重载"[] []"作为运算符,我不能.
有什么方法可以达到我想做的事情吗?
Meh*_*ari 14
注意:这个答案谈到实现类似的东西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; }
}
Run Code Online (Sandbox Code Playgroud)