如何表明C#中的局部变量不会改变?

如何表明C#中的局部变量不会改变?,c#,constants,local-variables,C#,Constants,Local Variables,在阅读一些源代码时,了解初始化后变量不会更改是很有用的。 例如,在以下代码示例中: 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 = Com

在阅读一些源代码时,了解初始化后变量不会更改是很有用的。 例如,在以下代码示例中:

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;
     }
}
for(int i=0;i
如果代码审阅者能够告诉他们不要太在意
索引
变量,那就太好了,因为它的值永远不会改变。显然,您可以在评论中这样做,但评论并不总是更新的,也不一定可靠。

在某些语言中,可以使用关键字来确保断言“此局部变量的值在初始化后不会更改”。C#中是否有这样的关键字?

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

我能想到的唯一解决方案是创建一个包装器类,它初始化一个get-only属性。为了便于使用,可以向基础类型添加隐式强制转换运算符,也可以从基础类型添加隐式强制转换运算符。但这肯定会带来一些性能开销,这可能不值得


有趣的是,我们正在讨论为什么没有这样的功能。

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

我能想到的唯一解决方案是创建一个包装器类,它初始化一个get-only属性。为了便于使用,可以向基础类型添加隐式强制转换运算符,也可以从基础类型添加隐式强制转换运算符。但这肯定会带来一些性能开销,这可能不值得


有趣的是,正在讨论为什么没有这样的功能。

关于
readonly
?你的意思是像C中的
static
一样?@Olivarsham
readonly
只用于全局variables@Ian不,我的意思是像
const
@JohnPeters:Variable life真的不是一个很难的概念,出于其他目的(例如循环中的lambda捕获是否访问同一个变量,或者每个实例都访问一个新变量),了解
readonly
?您的意思是像C中的
static
一样?@Olivarsham
readonly
仅用于全局variables@Ian不我的意思是像
const
@JohnPeters:变量生命周期真的不是一个困难的概念,理解其他用途(例如循环中的lambda捕获是否访问同一个变量,或者每个实例使用一个新变量)很重要