【发布时间】:2016-04-22 12:24:49
【问题描述】:
假设我有两个 KeyValuePair 变量。
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>("a", 5);
KeyValuePair<string, double> kv2 = new KeyValuePair<string, double>("b", 7);
“KeyValuePair”结构体中没有+操作的定义。
所以我想使用运算符重载!
我的目标是获得第三个 KeyValuePair 类型变量,例如:
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>(kv1.Key + " + " + kv2.Key, kv1.Value + kv2.Value);
结果将是:
KeyValuePair<string, double>("a + b", 12)
但是告诉我如何使用“运算符”来做到这一点?
我试图这样做:
public partial class Form1 : Form
{
public Form1()
{
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>("a", 5);
KeyValuePair<string, double> kv2 = new KeyValuePair<string, double>("b", 7);
KeyValuePair<string, double> k = kv1 + kv2;
}
public static KeyValuePair<string, double> operator +(KeyValuePair<string, double> c1, KeyValuePair<string, double> c2) => new KeyValuePair<string, double>(c1.Key + " + " + c2.Key, c1.Value + c2.Value);
}
但是有一条错误消息: "至少有一个参数应该是 Form1"
这意味着您只能为 Form.From1 输入创建运算符...
我想扩展 KeyValuePair 类!
但是后来我介绍了“KeyValuePair”是一个结构但它不是一个类!
我们可以创建继承自“KeyValuePair”结构的新结构吗?
那么怎么做呢?
谢谢!
【问题讨论】:
-
我希望
"a" + "b"产生"ab",而不是"a + b"...无论哪种方式,如果您想要运算符重载,您必须创建自己的类型。如果您希望运算符重载并且需要使用KeyValuePair,您可以定义(显式和/或隐式)conversion operators 以简化您自己的类型和KeyValuePair之间的转换。
标签: c# struct operator-overloading keyvaluepair