【问题标题】:Variable assignment has a type? What is this called?变量赋值有类型吗?这个叫什么?
【发布时间】:2012-12-05 21:03:43
【问题描述】:

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

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

这对我来说似乎很明显,我只是设法通过使用 C# 多年,却没有注意到这会起作用:

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

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

我几乎不好意思发布这个,因为这似乎是一件很难不曾想过/见过的事情,哈哈。提前致谢。

【问题讨论】:

  • 因为这个事实你可以这样写: int x, y, z; x = y = z = 5;

标签: c# .net variable-assignment


【解决方案1】:

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

简单赋值表达式的结果就是赋值给 左操作数。结果与左操作数具有相同的类型,并且 总是被归类为一个值。

【讨论】:

  • 很多好的答案,但是这个从源头上解释得最清楚,所以我将它标记为答案。猜猜这么多人回答的事实意味着我不好意思发布这个问题是对的,哈哈。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您必须寻找赋值运算符,它的计算结果是新设置的值。基本上在

    (i = 1).GetType();
    

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

    【讨论】:

      【解决方案4】:

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

      很好用,但我个人更喜欢表现力。 imo 有两个后果,更容易错过一些东西。当我开始阅读带有return 的行时,我不希望它会产生分配变量的副作用。只是我的 .02。

      【讨论】:

        【解决方案5】:

        Assignment 和其他表达式一样,表达式的值就是被赋值的对象。

        【讨论】:

          【解决方案6】:

          长话短说: 赋值运算符返回类型等于左侧变量类型的值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-10
            • 1970-01-01
            • 2020-01-12
            • 1970-01-01
            • 2014-03-05
            • 2017-02-24
            • 2012-08-21
            • 2016-04-02
            相关资源
            最近更新 更多