mis*_*tor 31 c# local-variables readonly immutability
如何在C#中声明一个局部常量?
与在Java中一样,您可以执行以下操作:
public void f(){
final int n = getNum(); // n declared constant
}
Run Code Online (Sandbox Code Playgroud)
如何在C#中做同样的事情?我试着用readonly
和const
,但没有一个似乎工作.
任何帮助将不胜感激.
谢谢.
Eri*_*ang 21
在C#中,您无法创建从方法中检索的常量.
编辑:死链接
http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx
该文档应该有所帮助:https: //docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const
常量表达式是一个可以在编译时完全计算的表达式.
Zun*_*Tzu 13
将您的局部变量声明为迭代变量.迭代变量是只读的(你没有要求一个漂亮的解决方案).
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'"
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么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());
}
Run Code Online (Sandbox Code Playgroud)
readonly
仅适用于类级别(即,您只能将其应用于字段).另外,由于const
需要文字,它本身就是静态的,而readonly
字段可以是静态的或实例的.