【发布时间】:2016-12-29 18:42:44
【问题描述】:
我知道,与 C++ 不同,在 C# 中无法覆盖赋值运算符 (=),如果我们想将 C 类的实例 i1 分配给另一个实例 i2(类C)。
但问题来了: 我有一个通用类 T
public class Node<T>
{
public Node<T> Next;
public Node<T> Previous;
T Content;
public Node<T>()
{
}
}
T 可以是像 Person 这样的泛型类,也可以是像 int、double 这样的 C# 标准类型...有时需要将 Node 中的内容 T 的值分配(=)另一个内容 T。它如果有一个赋值运算符可以在泛型类 T 中实现,这样 t1=t2 操作将适用于泛型类和标准类型,例如 int、double... 等,那就太好了。
由于 C# 中不允许重载赋值运算符,您有什么建议?我正在寻找一种既适用于泛型类又适用于标准类型的优雅解决方案,这样我的代码就不必区分不同的场景。
有可能做到吗?非常感谢!
【问题讨论】:
-
在 C# 中,“将 C 类的实例 i1 分配给 C 类的另一个实例 i2”是罕见且非常奇怪的。在 C# 中,我们将有一个可重新绑定的引用
r到类C,并且我们会将C的新实例分配给r。在 C# 中,如果T是一个类,则T Content只能是一个引用。并且 C# 引用是可重新绑定的。 -
在
C#中有用于此目的的克隆机制。 -
为什么
this.Content = other.Content不适合你?你能解释一下吗?另外,考虑使用内置的LinkedList<T>类型。