如何在 C# 中声明一个局部常量?
就像在 Java 中一样,您可以执行以下操作:
public void f(){
final int n = getNum(); // n declared constant
}
如何在 C# 中做同样的事情?我试过了readonly
,const
但似乎没有一个工作。
任何帮助将不胜感激。
谢谢。
如何在 C# 中声明一个局部常量?
就像在 Java 中一样,您可以执行以下操作:
public void f(){
final int n = getNum(); // n declared constant
}
如何在 C# 中做同样的事情?我试过了readonly
,const
但似乎没有一个工作。
任何帮助将不胜感激。
谢谢。
在 C# 中,您不能创建从方法中检索的常量。
编辑:死链接
http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx
该文档应该有所帮助: https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const
常量表达式是可以在编译时完全计算的表达式。
将局部变量声明为迭代变量。迭代变量是只读的(你没有要求一个漂亮的解决方案)。
public void f()
{
foreach (int n in new int[] { getNum() }) // n declared constant
{
n = 3; // won't compile: "error CS1656: Cannot assign to 'n' because it is a 'foreach iteration variable'"
}
}
我不确定为什么readonly
并且const
对您不起作用,因为这些是您需要的关键字。const
如果您有文字(数组文字除外),则使用,readonly
否则:
public void f()
{
const int answer = 42;
}
private readonly int[] array = new int[] { 1, 2, 3, 4 };
private readonly DateTime date = DateTime.Now;
public void g()
{
Console.WriteLine(date.ToString());
}
readonly
仅适用于类级别(也就是说,您只能将其应用于字段)。同样由于const
需要文字,它本质上是静态的,而readonly
字段可以是静态的或实例的。
有一种解决方法需要 ReSharper。您无法获得只读本地人,但您至少可以检测到变异的本地人并为它们着色。
使用字体和颜色项Resharper Mutable Local Variable Identifier。
对我来说,我将本地人涂成灰色,然后我为变异变量选择了粗体白色(这是一个深色主题)。这意味着与常规变量相比,多次写入的任何变量都显示得更亮。然后,您可以尽您所能避免使用变异变量,或者如果该方法确实需要一个,那么它至少会被突出显示。
在您给出的示例中,您需要将变量声明为static
,因为您正在使用方法调用对其进行初始化。如果你用一个常数值初始化,比如 42,你可以使用const
. 对于类、结构和数组,readonly
应该可以工作。
const 关键字用于修改字段或局部变量的声明。
来自MSDN。
由于 C# 无论如何都不能强制执行“const 正确性”(如 c++),我认为它不是很有用。由于功能的范围非常狭窄,因此很容易不会失去监督。