3

タイプを特定のタイプにvar a = 7;設定するのはなぜですか(つまり、ではなく)?C#コンパイラによってオンザフライで行われるルール/デフォルト/チェックはありますか?aintbyte

4

7 に答える 7

14

「オンザフライ」の意味は明確ではありませんが、C#コンパイラは仕様に定められたルールに従うだけです。種類の宣言の場合:

var a = expression;

のタイプaはのタイプですexpression。式7はタイプですがint、の範囲内の定数であることが知られているためbyte次のことが可能になります。

byte a = 7;

コンパイルする。ただし、への変換を使用しても式の型は変更されないため、C #コンパイラは。の型に使用しますbyte7inta

varこのような定数には使用しないことをお勧めします。int、などの境界の周りでかなり混乱する可能性のあるコードで終わりuint、匿名型を支援し、コードをより読みやすくすることも目的としています。コードが読みにくくなる場合は、使用しないでください。longvar

于 2012-09-13T23:00:18.300 に答える
2

コンパイラは、サフィックスを持たないコード内の整数リテラルを。として扱いますint

したがって、この:

byte myByte = 255;

..実際には、int定数255を1バイトに暗黙的に変換しています。

これが、varが整数であると推測される理由です。コンパイラはデフォルトで整数リテラルを使用するためです。

これを行う場合:

var a = 7L;

Aはタイプlongです。

于 2012-09-13T23:14:16.830 に答える
1

デフォルトがあります、私はあなたにそれらのすべてを手元に伝えることができませんでした。5/7を呼び出す場合と同様に、デフォルトで整数除算になります。ただし、5 / 7.0を実行すると、通常の除算が実行されます。varは、割り当てられた値のタイプにタイプを設定するだけです。キャストがない場合、デフォルトでは整数になります。

于 2012-09-13T23:00:40.270 に答える
0

var「実行時に型を判別する」という意味ではなく、「代入演算子の右側にある式の結果型を使用して型を判別する」という意味です。コンパイル時に決定されます。

于 2012-09-13T23:00:25.613 に答える
0

マニュアルによる

暗黙的に型付けされたローカル変数は、自分で型を宣言したかのように強く型付けされますが、コンパイラーが型を決定します。

および

varキーワードは、初期化ステートメントの右側にある式から変数の型を推測するようにコンパイラーに指示します。

簡単に言えば、コンパイラーは、変数に割り当てられたデータの使用可能な最も低い型をチェックし、その変数をそのデータ型に強く型付けします。

于 2012-09-13T23:01:31.093 に答える
0

varキーワードは、コンパイラが変換できる型に指定値を自動的に設定します。例:var s = ""; 文字列を含み、文字列になります。

于 2012-09-13T23:01:41.790 に答える
-2

varは一般的な型であり、CLRが必要なメモリ管理を処理するため、式の型を決定し、変数をその型にするため、aを式の型に設定します。

于 2012-09-13T23:06:24.273 に答える