40

C# でローカル定数を宣言する方法は?

Java と同様に、次のことができます。

public void f(){
  final int n = getNum(); // n declared constant
}

C# で同じことを行うには? readonly私はandで試しましconstたが、どれもうまくいかないようです。

どんな助けでも大歓迎です。

ありがとう。

4

7 に答える 7

24

C# では、メソッドから取得される定数を作成できません。

編集:リンク 切れ http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx

このドキュメントが役立ちます: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const

定数式は、コンパイル時に完全に評価できる式です。

于 2010-01-13T06:03:37.140 に答える
18

ローカル変数を反復変数として宣言します。反復変数は読み取り専用です (きれいな解決策を求めていませんでした)。

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'"
  }
}
于 2014-12-19T16:34:38.990 に答える
7

これらは必要なキーワードであるため、readonlyなぜうまくいかなかったのかわかりません。リテラル (配列リテラルを除く) がある場合はconst使用し、そうでない場合は次のように使用します。constreadonly

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フィールドは静的またはインスタンスのいずれかになることができますが、それは本質的に静的です。

于 2010-01-13T06:02:11.137 に答える
4

2018 年 10 月 2 日の時点で、C# で読み取り専用のローカルを使用することはできませんが、その機能について進行中の議論が行われているオープンな提案があります。

この記事では、役に立つ要約を提供します。

于 2018-10-02T19:01:45.643 に答える
1

あなたが示した例staticでは、メソッド呼び出しで変数を初期化しているため、変数を として宣言する必要があります。42 などの定数値で初期化していた場合は、const. クラス、構造体、および配列の場合、readonly機能するはずです。

于 2010-01-13T06:04:11.040 に答える
0

const キーワードは、フィールドまたはローカル変数の宣言を変更するために使用されます。

MSDNから。

いずれにせよ、C# は (c++ のように) 「const correctnes」を強制できないため、あまり有用ではないと思います。関数のスコープは非常に狭いため、見落としがちです。

于 2010-01-13T06:02:21.403 に答える