1

Convert.ToInt32()次のコードを確認して、との違いを教えてください。int()なぜConvert.ToInt32エラーが表示されるのですか?

これUserTypeが列挙型です

// Showing error constant initializer must be compile time constant
const int case1 = Convert.ToInt32(UserType.Admin); 

const int case2 = int(UserType.Admin);
4

4 に答える 4

3

メソッドからの戻り値を定数に割り当てていますが、これは許可されていません。.Net では、コンパイル時に定数の値を知る必要があります。実行時にメソッド呼び出しから値が割り当てられている場合、これは不可能です。

一般的なケースでは、これを少し変更して、論理的に同等のコードを作成できます。

static readonly int Case1 = Convert.ToInt32(UserType.Admin);

ただし、列挙型では an への単純なキャストintが許可されるため、2 番目の例はおそらく (慣用的ではありませんが) OK です。

于 2012-06-28T12:22:26.460 に答える
1

次の理由により、このエラーが発生しています。

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

定数 - MSDN

そして、あなたConvert.ToInt32()はコンパイル時の定数式ではなく、メソッドです。

第 2 部の場合:

const int case2 = int(UserType.Admin);

私はあなたが意味したと信じています

const int case2 = (int)UserType.Admin;
于 2012-06-28T12:26:44.847 に答える
1

Convert.ToInt32呼び出す必要があるメソッドです。
これはコンパイル時の定数ではなく、実行時に呼び出す必要があります。

(int)UserType.AdminUserType.Adminは定数であり、(int)単に int にキャストされるため、コンパイル時には定数です。コンパイラはこれを問題なく評価できます。呼び出されるメソッドはありません。

ただし、列挙型に関連付けられている元の意味が失われるため、列挙型を整数に変換しないことをお勧めします。

于 2012-06-28T12:24:08.693 に答える
-1

(int) は、整数として表現できる型 (double、long、float など) のみを変換しますが、データが失われる可能性があります。

Int32.Parse は文字列のみを整数に変換します。文字列を整数にキャスト (つまり (int)mystring) することはできません。

于 2012-06-28T12:23:45.927 に答える