这是什么意思?int i =(i = 20);

3Pi*_*3Pi 29 c#

我在这里开始了解变量时偶然发现了这一点:

http://msdn.microsoft.com/en-us/library/bb384061.aspx

但是,我不知道这是一个法律表达(它是).我以为你不能用a =(b = c)分配东西,因为(b = c)不会产生一个值来分配?

感谢您对此事的任何澄清.

Sea*_*n U 31

这是合法的.从=运算符C#参考页面:

赋值运算符(=)将其右侧操作数的值存储在由其左侧操作数表示的存储位置,属性或索引器中,并将该值作为结果返回.

(强调我的)

示例中的代码是设计的(并且毫无意义),但它可以在其他情况下用于以更简洁的方式执行有用的操作.例如:

BinaryTree tree;
TreeNode node;
if((node = tree.FindNodeForKey(10)) != null)
{
    // do useful things with returned node
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你要在不同的变量中分配相同的值,你也可以使用它,比如`btnX.Visible = btnY.Visible = btnZ.Visible = false;`,虽然它不是那么可读_(至少对我而言)_. (2认同)

Les*_*Les 14

MSDN的全部引用是:

使用var声明的变量不能在初始化表达式中使用.换句话说,这个表达式是合法的:int i =(i = 20); 但是这个表达式会产生一个编译时错误:var i =(i = 20);

关键是你不能在初始化表达式中使用var声明的变量.换句话说,如果使用var来声明i,则不能在=符号的另一侧使用i.

正如其他人所说,你实际上不会写这段代码.这是一个人为的例子.


Chu*_*age 6

我一直都在使用那种东西.

public class Parameters
{
    public readonly bool ContainsSquareBrackets;

    public Parameters(string paras)
    {
        if(ContainsSquareBrackets = paras.Contains(']') || paras.Contains('['))
        {
             // do something ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)