(主に通信プロトコル、)組み込みのAPIを扱うときに、私は多くの場合、Cで使用したショートカットは私が列挙型の配列を編集して、正しくその後のサイズの他のすべてを持つことができます:C#enum(コンパイル時のenumのサイズ)でsentinal値を使用していますか?
typedef enum {
errortype1,
errortype2,
...
errortypeN,
ERROR_TYPE_MAX
} ErrorTypeList;
int errorcounts[ERROR_TYPE_MAX]; // Create array to hold a counter for each error type
限り、私は新しいエラーを追加しますERROR_TYPE_MAXの前に型を指定すると、それ以外のところでその値を使用して、列挙型のサイズを指定できます。 C#ので
、しかし、これはそのままでは動作しません:
enum ErrorTypeList {
errortype1,
errortype2,
...
errortypeN,
ERROR_TYPE_MAX
};
int errorcounts[ErrorTypeList.ERROR_TYPE_MAX]; // Create array to hold a counter for each error type
この使用法はnew
を使用することを提案しているエラーArray size cannot be specified in a variable declaration
を提示します。
実行時(new
経由)の配列を私の唯一のオプションとして定義していますか、または列挙型のサイズがコンパイル後に変更されないため、これを新しいものなしに行う方法がありますか?
このタイプのenumサイジングパターンの代わりに、C#に適していますか?
を発生するようそうでない場合、私はおそらく唯一のエントリを追加することになり、私はないと思いますあなたが望む代わりに、フレームワーク設計[ガイドライン推奨](http://msdn.microsoft.com/en-us/library/ms229058.aspx)に、センチネル値を列挙に含めないようにしてください。 –
@ConradFrix優れたリンクと検索、ありがとう。 –
あなたがそれを気に入ってうれしいです。アノテーションが素晴らしいので、[書籍版](http://www.amazon.com/Framework-Design-Guidelines-Conventions-Libraries/dp/0321545613/ref=dp_ob_title_bk)もお勧めします。 –