2012-03-20 25 views
5

c#enumでサポートされている算術演算は何ですか?驚いたことに、私はgoogleもwikipediaもstackoverflowも経由して見つけることができませんでした。enum値の算術演算

2つの列挙値を追加できますキャストなし?任意の定数を値に追加するか、それを減算するか? enumは、その型の値が常に定義されたenum値またはそのビットマスクの1つであることを保証しますか?

class ... {... 
enum WeekDays : byte { Sun = 1, Mon = 2, Tue = 3, /* and so on*/ Sat = 7 }; 
public static bool IsWeekend (WeekDays _d) { 
/// Can I be sure here that _d has value from 1..7? May it be any of 0..255? 
} 

私はビット演算について知っています。フラグを表すためにそれらをサポートすることは合理的です。

私のサンプルでも、_d - 1またはWeekDays.Tue - WeekDays.Monが使用できますが、これは厳密に順序づけられた列挙型の列挙型に便利ですが、標準的な参照は見つかりません。

+0

あなたはそれをテストして何が起こるか見ることはできますか? – Matt

+1

私のポイントは、特定のコンパイラの動作ではなく、標準を知ることです。まず、確かめたいのは、標準のC#(MS、Mono、)をサポートしているコンパイラのコードが正しいことです。第二に、対応する標準の記事から有用なものを読んで、私のC#テストのためによりよく準備したいと思っています。 – gluk47

答えて

0

算術演算を使用する場合は、enumsを使用しないでください。numbersを使用してください。 Enumsは、数値を人間が読みやすくするための命名法であり、の組み合わせを使用することができます。それは実際にあなたがインターネット上でそれについて何も見つけられなかった理由です。なぜなら、それはenumsで行うべきではないからです。 ==!=<><=>=+-^&|~++--sizeof

+0

算術演算を明示的に許可または禁止する標準の章を見つけたいと思います。 私はまた、 ' + 'と' - 'が許されていることを知りました。それでは、C#devsのポイントから意味をなさないもの、興味深いことに、enum値を私のコード。 私はenum値の演算を禁止しています。ビットワイズ演算を明示的に許可する可能性があります。私はあなたに同意します) – gluk47

+0

@ gluk47:列挙型は単なる整数なので、可能な算術演算のすべてのセットをサポートしています。ことは、私が言ったように、それはenum型でそれらを使うのはちょうど事実ではない、ということです。しかし、彼らは** ** prhibitedではありません。 – Tigran

+0

実際には禁止されています。 2つの列挙型の値を追加または掛けようとすると、少なくともVS2008でエラーが発生します。操作は両方のオペランドを基になる型にキャストすることで処理を進めることができますが、私の質問は演算子がenum値に直接適用できるかどうかということでした。 – gluk47

5

次の演算子は、列挙型の値を使用することができます。

+0

ありがとうございます。どうやってそれを見つけましたか?任意のリファレンス、マンページ? ここで '+'は ' + 'を意味しますか? – gluk47

+0

'-'はバイナリマイナスを表しますか?同様に、 ' + 'が許可されていますか? – gluk47

+0

@ gluk47、列挙型の各要素の基礎となる型は、 'char'を除く整数型です。したがって、列挙型は、例えば 'int'データ型と同じ操作をします。 –