【问题标题】:How to indicate that a local variable in C# will not change? [duplicate]如何表示 C# 中的局部变量不会改变? [复制]
【发布时间】:2016-02-26 04:05:26
【问题描述】:

在阅读一些源代码时知道初始化后变量不会改变会很有用。 例如在以下代码示例中:

for (int i = 0; i < Height; ++i)
{
    for (int j = 0; j < Width; ++j)
    {
        int index = i * Width + j;  // This variable never changes later. Or will it? [TrollFace]
        float myValue = ComputeValue(i, j);
        // ...
        myArray[index] = myValue;
     }
}

如果代码审阅者能够告诉他们不要太在意index 变量,那就太好了,因为它的值永远不会改变。显然你可以在评论中做到这一点,但 cmets 并不总是更新,也不一定可靠。
在某些语言中,可以使用关键字来确保断言“此局部变量的值在初始化后不会改变”。 C#中有这样的关键字吗?

【问题讨论】:

  • readonly 呢?
  • 你的意思是像 C 语言中的 static
  • @Olivarsham readonly 仅用于全局变量
  • @Ian 不,我的意思是像const
  • @JohnPeters: 变量生命周期确实不是一个很难的概念,理解其他目的很重要(例如循环内的 lambda 捕获是访问同一个变量,还是为每个变量创建一个新变量)实例)

标签: c# constants local-variables


【解决方案1】:

据我所知,没有这样的功能。有 readonly 关键字,但这是用于类字段,而不是局部变量。

我能想出的唯一解决方案是创建一个包装类,它初始化一个 get-only 属性。为了便于使用,您可以在底层类型之间添加隐式转换运算符。但这肯定会产生一些性能开销,而且可能不值得。

有趣的是,there seems to be a question already 讨论了为什么没有这样的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2016-04-30
    相关资源
    最近更新 更多