3

私はこの問題を抱えており、解決策を探していますが、私のような状況は見つかりませんでした.これが私が持っているものです:

クラスファイル X.cs:

namespace BlaBla{

  public class X{
    public const string foo = "foo";
    // other code
  }

  public class Y{
    public const int bar = 0;
  }
}

他のクラスでは、次のように書いています。

private const string someString = X.foo + Y.bar + "";

コンパイルエラーが発生し続けます:

The Expression assigned to someString must be constant

どちらも一定ですが!Y.bar を削除すると、エラーが削除され、理由がわかりません。助けはありますか?

4

3 に答える 3

4

constキーワードの使い方が間違っています。おそらく次のように定義する必要がありますsomeString

private readonly someString = X.foo + Y.bar;

const変数がアセンブリにコンパイルされてから最適化されるときに、変数がマークされている場合。Y.barは として定義されていconstますが、そのメソッドを暗黙的に呼び出してToString()いるため、定数ではありません。

于 2013-03-18T10:25:56.363 に答える
3

intからへの変換を含めていますstring。は定数ですintが、変換は定数式とは見なされません。

それをもっと簡単に示すことができます:

class Test
{
    const int X = 10;
    const string Y = "X: " + X;
}

定数式としてカウントされるものの詳細については、C# 仕様のセクション 7.19 を参照してください。

于 2013-03-18T10:25:22.430 に答える
1

式は定数のように見えますが、値を把握できるように評価が必要です。

于 2013-03-18T10:25:55.063 に答える