&引用-+&引用;操作员c#MONO 2.10.12

&引用-+&引用;操作员c#MONO 2.10.12,c#,mono,C#,Mono,我只是在我的代码中发现了很奇怪的东西。我错误地将以下内容作为索引: int a = 1; int b = 1; Dictionary<int, SomeClass> dic = new Dictionary<int, SomeClass> (); dic[a -+ b].Field = 0; inta=1; int b=1; Dictionary dic=新字典(); dic[a-+b]。字段=0; 正如您所看到的,有一个“-+”运算符真正起到了“-”的作用。 不

我只是在我的代码中发现了很奇怪的东西。我错误地将以下内容作为索引:

int a = 1;
int b = 1;

Dictionary<int, SomeClass> dic = new Dictionary<int, SomeClass> ();

dic[a -+ b].Field = 0;
inta=1;
int b=1;
Dictionary dic=新字典();
dic[a-+b]。字段=0;
正如您所看到的,有一个“-+”运算符真正起到了“-”的作用。 不管怎么说,代码运行得很好,在我找到它之前一直在编译

这是我现在正在编写的Unity3d游戏代码的一部分


问题是:这正常吗?或者这是mono 2中的已知错误,已经修复。我找不到任何关于它的信息。

这没什么奇怪的,也没有
-+
操作符。有一个一元
+
运算符和一个二进制
-
运算符。只需添加括号和一些间距,以使其更清晰:

int a = 1;
int b = 1;
int c = a -+ b;
int d = a - (+b); // Same as above
请注意,您也可以将
+-
与一元
-
运算符和二进制
+
运算符一起使用:

int e = a +- b;
int f = a + (-b); // Same as above
虽然不能像这样使用
++
--
,因为它们实际上是独立的运算符,但可以添加一个空格:

int g = a + + b;
int h = a + (+b); // Same as above

int i = a - - b;
int j = a - (-b); // Same as above
您还可以将多个一元运算符链接在一起,以实现真正的疯狂:

int k = a +-+-+-+ b;
int l = a + (-(+(-(+(-(+b)))))); // Same as above

a-+-+-+-+-+-+-+-b
也有效。但是没有
+-
操作符。这只是+,-的组合。只要将间距设置正确,就可以看到它是正确的:
dic[a-+b]。字段=0使用
dic[a--b]将其更改。字段
。使用goes to操作符使团队成员晕眩:
var huh=a-->b一元+运算符可能被排除在语言之外,很少有程序员会错过它:)你应该得到一个新的徽章,因为第一个代表需要两行代码