Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 链增量算子_C#_Operators - Fatal编程技术网

C# 链增量算子

C# 链增量算子,c#,operators,C#,Operators,你为什么不能做连锁经营者 int test = 5; test++++; 或 这段代码给出了一个编译时错误 递增或递减运算符的操作数必须是变量、属性或索引器 我完全理解这一点,如果允许的话,这将是一个完整的代码味道,并且几乎没有实际用途。我不完全理解为什么这会导致错误。我几乎希望test的值在每个语句之后都是7。操作符在“左手值”上工作,即可以指定的值,因为它相当于: test = test + 1; 另一方面,test++是一个表达式,您不能给它赋值,test++=5不起作用 这就是(te

你为什么不能做连锁经营者

int test = 5;
test++++;

这段代码给出了一个编译时错误

递增或递减运算符的操作数必须是变量、属性或索引器


我完全理解这一点,如果允许的话,这将是一个完整的代码味道,并且几乎没有实际用途。我不完全理解为什么这会导致错误。我几乎希望
test
的值在每个语句之后都是7。

操作符在“左手值”上工作,即可以指定的值,因为它相当于:

test = test + 1;
另一方面,
test++
是一个表达式,您不能给它赋值,test++=5不起作用


这就是
(test++)+
不起作用的原因。

+++是一个特殊的操作符,它只是foo=foo+1的简写。当你只能说foo=foo+7时,没有必要创建一个无限的重载列表,比如+++、++++,等等,这是必须要做的

  • 它本身是一个连接两个值的运算符。如果语言设计人员试图像您建议的那样将pull double duty作为一种特殊语法,那么这将给编译器带来额外的负担,并可能导致一些混乱的代码
因此,简单的回答是,这不值得付出努力。没有它并不难,尤其是使用+=运算符。而且更具可读性。更容易阅读的内容:

int test = 1;
test+++++;
或者

int test = 1;
test += 5;

数一数这些加号会让人很痛苦。2是显而易见的。不仅如此,你还将在50比50的抽奖中数果冻豆。:-)

基本上是由于本规范第7.6.9节:

后缀递增或递减操作的操作数必须是分类为变量、属性访问或索引器访问的表达式。运算结果是与操作数类型相同的值

第二句话意味着
i++
被分类为一个值(与
i
不同,不是一个变量),第一句话阻止它成为运算符的操作数

我怀疑它是为了简单而设计的,以避免你真的不想进入的奇怪情况——不仅仅是你给出的代码,还有类似的事情:

Foo(ref i++);
i++ = 10;

你的意思是说你不明白规范的哪一部分禁止它,或者为什么它是这样设计的?有没有任何语言允许这样做?@JonSkeet:为什么它是这样设计的?@JonSkeet我猜两者都有一点。在Afor循环中,我唯一能看到的唯一的用法是替换<代码> i=i+2 < />。@ Habib:是的,C++(只不过前缀版本,最大增量为一个后)。例如,我认为OP意味着像
(I++++++
)一样第二次应用
++
操作符,而不是为什么语言没有
++
++
操作符。
Foo(ref i++);
i++ = 10;