在延迟加载的属性getter中看到类似的东西:
public SomeClass SomeProperty
{
get
{
return _someVar ?? (_someVar = new SomeClass());
}
}
对我来说似乎有点明显的事情,我现在已经设法通过使用C#多年来没有注意到它会起作用:
int i = 0;
(i = 1).GetType();
我想我的主要问题是,这是否有某种特殊的名称,我可以用它来搜索有关它的更多信息/将其描述给其他人?我想我很好奇是否有任何与之相关的陷阱(执行顺序等,类似于将多个空合并运算符链接在一起时必须考虑的内容),或者是否有任何其他标准用途这就像上面看到的延迟加载的属性getter(尽管我认为它与替代品相比并不特别干净。)
哈哈,我几乎不好意思发布这个,因为它看起来很难以前没想过/看过。提前谢谢。答案 0 :(得分:3)
这只是赋值是C#中表达式的结果。来自C# specification:
简单赋值表达式的结果是赋值的值 左操作数。结果与左操作数和。的类型相同 总是被归类为价值。
答案 1 :(得分:2)
它不是具有类型的变量赋值,但它是左侧操作数。
任何将被评估并返回类似方法调用的表达式都是相同的。
有关更多信息,请参阅以下页面: http://en.wikipedia.org/wiki/Expression_(programming) http://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)
简短的故事: 赋值运算符返回的值类型等于左侧变量的类型。