有没有办法在C#中重载+ =运算符

时间:2014-09-05 12:22:16

标签: c# operator-overloading

我试图在我的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;
    }
}

弹出以下错误:

  1. 预期可加载的二元运算符(我认为+ =是一个有效的运算符。是否附加了特殊规则?
  2. 运营商&#34; + =&#34;不能应用于类型&#39; Hashtable&#39;的操作数。和&#39; KeyValuePair&#39; - 这种方式很有意义。我的变量y已隐式转换为Hashtable。作为一个理论,我认为这部分将失败,因为y不是HashClass
  3. 我还可以尝试重载+ =运算符吗?这甚至可能吗?

3 个答案:

答案 0 :(得分:6)

您只需要重载+运算符,因为+=只是一个语法糖,例如:

x += 1

相当于

x = x + 1;

答案 1 :(得分:1)

不,您不能超载+=运营商。但是你可以重载+运算符。

  

分配运算符不能重载,但是+ =,例如,使用+来计算,可以重载。

From Msdn

答案 2 :(得分:0)

你不能重载+ =运算符。 您可以像这样修改您的代码:

 var y = x + new KeyValuePair<string, string>("three", "three");
        y = y + new KeyValuePair<string, string>("four", "four");

它可以随心所欲地工作。