我试图在我的c#代码中重载+=
运算符,基本上只是为keyValuePair
添加一个Hashtable
结构(在这种情况下,它是一个继承自Hashtable
的类{1}}类)
using System;
using System.Collections.Generic;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Program
{
private static void Main()
{
var x = new HashClass();
x.Add("one", "one");
x.Add("two", "two");
var y = x + new KeyValuePair<string, string>("three", "three");
y += new KeyValuePair<string, string>("four", "four");
foreach (System.Collections.DictionaryEntry z in y)
{
Console.WriteLine(z.Key + " " + z.Value);
}
}
}
public class HashClass : System.Collections.Hashtable
{
public static System.Collections.Hashtable operator +(HashClass itema, KeyValuePair<string, string> itemb)
{
itema.Add(itemb.Key, itemb.Value);
return itema;
}
public static System.Collections.Hashtable operator +=(HashClass itema, KeyValuePair<string, string> itemb)
{
itema.Add(itemb.Key, itemb.Value);
return itema;
}
public static implicit operator HashClass(KeyValuePair<string, string> item)
{
var x = new HashClass();
x.Add(item.Key, item.Value);
return x;
}
}
弹出以下错误:
y
已隐式转换为Hashtable。作为一个理论,我认为这部分将失败,因为y
不是HashClass 我还可以尝试重载+ =运算符吗?这甚至可能吗?
答案 0 :(得分:6)
您只需要重载+
运算符,因为+=
只是一个语法糖,例如:
x += 1
相当于
x = x + 1;
答案 1 :(得分:1)
答案 2 :(得分:0)
你不能重载+ =运算符。 您可以像这样修改您的代码:
var y = x + new KeyValuePair<string, string>("three", "three");
y = y + new KeyValuePair<string, string>("four", "four");
它可以随心所欲地工作。