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