C#中如何表示一个局部变量不会改变?
How to indicate that a local variable in C# will not change?
在阅读一些源代码时知道变量在初始化后不会改变会很有用。
例如在下面的代码示例中:
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
变量会很好,因为它的值永远不会改变。显然你可以在评论中做到这一点,但评论并不总是更新并且不一定可靠。
在某些语言中,可以使用关键字来确保断言 "the value of this local variable will not change after initialization"。 C#中有这样的关键字吗?
据我所知,没有这样的功能。有 readonly
关键字,但这是针对 class 字段,而不是局部变量。
我能想出的唯一解决方案是创建一个包装器 class,它初始化一个 get-only 属性。为了便于使用,您可以向基础类型添加隐式转换运算符或从基础类型中添加隐式转换运算符。但这肯定会有一些性能开销,这可能不值得。
有趣的是,there seems to be a question already 讨论为什么没有这样的功能。
在阅读一些源代码时知道变量在初始化后不会改变会很有用。 例如在下面的代码示例中:
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
变量会很好,因为它的值永远不会改变。显然你可以在评论中做到这一点,但评论并不总是更新并且不一定可靠。
在某些语言中,可以使用关键字来确保断言 "the value of this local variable will not change after initialization"。 C#中有这样的关键字吗?
据我所知,没有这样的功能。有 readonly
关键字,但这是针对 class 字段,而不是局部变量。
我能想出的唯一解决方案是创建一个包装器 class,它初始化一个 get-only 属性。为了便于使用,您可以向基础类型添加隐式转换运算符或从基础类型中添加隐式转换运算符。但这肯定会有一些性能开销,这可能不值得。
有趣的是,there seems to be a question already 讨论为什么没有这样的功能。