一般に、可能な限りデータに最も具体的なデータ型を常に使用する必要があります。
たとえば、Entity Frameworkを使用してデータベースからデータをプルしている場合、EFはデータベースで使用されているデータ型に最も近いデータ型を自動的に使用します。
C#にはこれに関する2つの問題があります。
まず、ほとんどのC#開発者はを使用してint
、整数を表します(使用する理由がない限りlong
)。これは、他の開発者がデータ型をチェックすることを考えないため、上記のオーバーフローエラーが発生することを意味します。第二、そしてより重要な問題は、/。NETのことだったされ、元の算術演算子がサポートされる唯一のint
、uint
、long
、ulong
、float
、ダブル、およびdecimal
*。これは今日でも当てはまります(C#5.0言語仕様のセクション7.8.4を参照)。次のコードを使用して、これを自分でテストできます。
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
私たちの結果はbyte
- byte
ですint
(System.Int32
)。
これら2つの問題により、「整数には整数のみを使用する」という慣行が生まれました。
したがって、あなたの質問に答えるには、C#では、次のint
場合を除いて固執することをお勧めします。
- 自動化されたコードジェネレーターは、異なる値(Entity Frameworkなど)を使用しました。
- プロジェクトの他のすべての開発者は、あまり一般的ではないデータ型を使用していることを認識しています(データ型を使用したこととその理由を指摘するコメントを含めます)。
- あまり一般的ではないデータ型は、プロジェクトで既に一般的に使用されています。
- プログラムには、あまり一般的でないデータ型の利点が必要です(RAMに保持する必要があるのは1億個あるため、a
byte
とan int
またはan int
とaのlong
差が重要であるか、すでに述べた符号なしの算術差です)。
データを計算する必要がある場合は、一般的な型に固執してください。
あるタイプから別のタイプにキャストできることを忘れないでください。これは、CPUの観点からすると効率が低下する可能性があるため、7つの一般的なタイプのいずれかを使用する方が適切ですが、必要な場合はオプションです。
列挙(enum
)は、上記のガイドラインに対する私の個人的な例外の1つです。いくつかのオプションしかない場合、enumをbyteまたはshortに指定します。フラグ付き列挙の最後のビットが必要な場合は、uint
16進数を使用してフラグの値を設定できるように、タイプを指定します。
値を制限するコードでプロパティを使用する場合は、概要タグでどのような制限があり、その理由を必ず説明してください。
* System.Int32
これはC#の質問なので、.NET名の代わりにC#エイリアスが使用されます。
注:.NET開発者からブログまたは記事がありましたが(これは見つかりません)、限られた数の算術関数と、彼らがそれを心配しなかったいくつかの理由を指摘しました。私が覚えているように、彼らは他のデータ型のサポートを追加する計画がないことを示しました。
注:Javaは符号なしデータ型をサポートしておらず、以前は8ビットまたは16ビットの整数をサポートしていませんでした。多くのC#開発者はJavaのバックグラウンドを持つか、両方の言語で作業する必要があるため、一方の言語の制限が人為的に他方に課せられることがあります。