有2个问题不明白 1. + 运算符可以重载,但是好像不能重载+= 2. 重载只能写在+ 两边任意一个的类中,例如要实现 cat + dog,就只能写在cat类或者dog类中,那么像list<string> + list<string>或者list<cat> + list<dog>这种怎么做? 谢谢 |
|
10分 |
1、+=不就是+号和=号么?
2、泛型不能重载,不过貌似版主知道通过反射方法实现 |
10分 |
+= 本来就不是运算符,它是c#语法糖。
|
不能做。 |
|
20分 |
如果要变通,我给你写一个例子
public class MyListOfString { public List<string> Contents; public static List<string> operator +(MyListOfString a, List<string> b) { return a.Contents.Concat(b).ToList(); } public static implicit operator MyListOfString(List<string> a) { return new MyListOfString { Contents = a }; } } 那么对于两个 List<string>,你可以这样连接 var a = new List<string> { "aa" }; var b = new List<string> { "bb" }; var result = (MyListOfString)a + b; |
多谢楼上两位的指点,明白了。
Ps:sp1234你的变通方法很好,确实这样可以实现list这种的+重载。不过这样的话可读性和直接写一个扩展方法a.join(b)差不多了。我本来想直接用+来操作使代码清晰一点.。总之谢谢指点。 |