变量赋值有一个类型?这个叫什么?

时间:2012-12-05 21:03:44

标签: c# .net variable-assignment

在延迟加载的属性getter中看到类似的东西:

public SomeClass SomeProperty
{
    get
    {
        return _someVar ?? (_someVar = new SomeClass());
    }
}

对我来说似乎有点明显的事情,我现在已经设法通过使用C#多年来没有注意到它会起作用:

int i = 0;
(i = 1).GetType();

我想我的主要问题是,这是否有某种特殊的名称,我可以用它来搜索有关它的更多信息/将其描述给其他人?我想我很好奇是否有任何与之相关的陷阱(执行顺序等,类似于将多个空合并运算符链接在一起时必须考虑的内容),或者是否有任何其他标准用途这就像上面看到的延迟加载的属性getter(尽管我认为它与替代品相比并不特别干净。)

哈哈,我几乎不好意思发布这个,因为它看起来很难以前没想过/看过。提前谢谢。

6 个答案:

答案 0 :(得分:3)

这只是赋值是C#中表达式的结果。来自C# specification

  

简单赋值表达式的结果是赋值的值   左操作数。结果与左操作数和。的类型相同   总是被归类为价值。

答案 1 :(得分:2)

它不是具有类型的变量赋值,但它是左侧操作数。

任何将被评估并返回类似方法调用的表达式都是相同的。

有关更多信息,请参阅以下页面: http://en.wikipedia.org/wiki/Expression_(programminghttp://en.wikipedia.org/wiki/Statement_(computer_science)#Expressions

答案 2 :(得分:1)

您必须查找赋值运算符,该运算符将作为新设置的值进行求值。基本上在

(i = 1).GetType();

i被赋值为1,整个表达式(i = 1)被评估为整数1。

答案 3 :(得分:0)

这是一个有两种后果或副作用的线。也就是说,它做了两件事:1)它运行赋值; 2)它使用整个陈述作为另一个陈述的右手边(RHS)。我在C ++中更频繁地看到这一点,其中null可以用作BOOLEAN语句。

使用起来很好,但我更喜欢个人表现力更强。有了这两个后果,imo,让人更容易错过一些东西。当我开始用return读取一行时,我不认为它会产生分配变量的副作用。只是我的.02。

答案 4 :(得分:0)

Assignment是一个类似于任何其他表达式的表达式,表达式的值是指定给它的东西。

答案 5 :(得分:0)

简短的故事: 赋值运算符返回的值类型等于左侧变量的类型。