私は現在、先進的なプログラマが良いリファレンスとして使用するためにも優れた本だと思うように、C# 4.0 in a Nutshellという本を読んでいます。Enum.Isフラグ付き列挙型で定義されています
私は基本についての章を振り返り、フラグ付き列挙型を使用しているときに特定の値が列挙型で定義されているかどうかを知るためにトリックを見つけました。
本はEnum.IsDefined
を使用すると、フラグ付き列挙型では動作しないと述べており、このように回避策を示している:一定の値にフラグが設定された列挙型で定義されている場合、これはtrueを返す
static bool IsFlagDefined(Enum e)
{
decimal d;
return (!decimal.TryParse(e.ToString(), out d);
}
。
誰かが私にこの理由が説明できますか?一方
SomeValue, SomeOtherValue
:事前に
感謝:)
を別として、Enum.IsDefinedが期待と異なる動作をする可能性があります(またはデフォルト(T)かもしれません)。 Enum.IsDefined(default(T))はtrueと_false_の両方を返すことができます。デフォルト(T)(Tは列挙型)は常に(T)0を返します。したがって、Tが(T)0に対して有効な値を持たない場合、結果は偽です。少なくとも1回は私を捨ててください –