日期:2014-05-17  浏览次数:20788 次

操作符重载出现死循环
一个对象
myclass

里面一个字符数组
mylist string【】

一个读取方法
get(int i)return string【i】

一个添加方法
add(stirng s)vod stirng【i+1】=s;

一个重载
public static myclass operator +(myclass a, myclass b)
for(int i = 0; i < b.length; i++)
{
a.add(b.get(i));
}
return a;

——————————————————————————————
使用
var a = new myclass()
a。add(“a”);
////后面省略////


-----现象------
a=a+a;因为是相同对象,内部会使用一套下标;所以会一直添加下去



————我的临时解决————
public static myclass operator +(myclass a, myclass b)
var xxx = new myclass
for(int i = 0; i < a.length; i++)
xxx。add(a。get(i))
for(int i = 0; i < b.length; i++)
xxx。add(b。get(i))
return xxx;

----求救-----
上面的方法需要重复循环,可不可以不这样

我的理解好像是不行

------解决方案--------------------
为什么Array不重载 + ?
为什么List<T> 不重载 +?
楼主想过没有
------解决方案--------------------
主要是传入的变量是应用类型,而且指向的是同一个地址。使用克隆可以解决这个问题。
public static myclass operator +(myclass a, myclass b)
        {
            myclass c = (myclass)b.MemberwiseClone();
            for (int i = 0; i < c.length; i++)
            {
                a.add(c.get(i));
            }
            return a;
        }