C# でローカル定数を宣言する方法は?
Java と同様に、次のことができます。
public void f(){
final int n = getNum(); // n declared constant
}
C# で同じことを行うには? readonly
私はandで試しましconst
たが、どれもうまくいかないようです。
どんな助けでも大歓迎です。
ありがとう。
C# でローカル定数を宣言する方法は?
Java と同様に、次のことができます。
public void f(){
final int n = getNum(); // n declared constant
}
C# で同じことを行うには? readonly
私はandで試しまし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
フィールドは静的またはインスタンスのいずれかになることができますが、それは本質的に静的です。
2018 年 10 月 2 日の時点で、C# で読み取り専用のローカルを使用することはできませんが、その機能について進行中の議論が行われているオープンな提案があります。
この記事では、役に立つ要約を提供します。
あなたが示した例static
では、メソッド呼び出しで変数を初期化しているため、変数を として宣言する必要があります。42 などの定数値で初期化していた場合は、const
. クラス、構造体、および配列の場合、readonly
機能するはずです。
const キーワードは、フィールドまたはローカル変数の宣言を変更するために使用されます。
MSDNから。
いずれにせよ、C# は (c++ のように) 「const correctnes」を強制できないため、あまり有用ではないと思います。関数のスコープは非常に狭いため、見落としがちです。