Bunun benim gibi tökezleyen diğer insanlar için yararlı olabileceğini düşündüm.
== 0 değerine sahip olacak şekilde ayarlayabileceğiniz enum değerlerini nasıl ele aldığınıza dikkat edin (bazen bir numaralandırma için Bilinmeyen veya Boşta durumuna sahip olmak yararlı olabilir). Bu bit manipülasyon işlemlerine güvenirken sorunlara neden olur.
Ayrıca, 2 değerin diğer gücünün kombinasyonları olan enum değerleriniz olduğunda, örneğin
public enum Colour
{
None = 0, // default value
RED = 2,
BLUE = 4,
GREEN = 8,
YELLOW = 16,
Orange = 18 // Combined value of RED and YELLOW
}
Bu durumlarda, bunun gibi bir uzantı yöntemi kullanışlı olabilir:
public static Colour UnSet(this Colour states, Colour state)
{
if ((int)states == 0)
return states;
if (states == state)
return Colour.None;
return states & ~state;
}
Ve ayrıca, birleştirilmiş değerleri (biraz da acımasız bir şekilde de olsa) işleyen denk IsSet yöntemi
public static bool IsSet(this Colour states, Colour state)
{
// By default if not OR'd
if (states == state)
return true;
// Combined: One or more bits need to be set
if( state == Colour.Orange )
return 0 != (int)(states & state);
// Non-combined: all bits need to be set
return (states & state) == state;
}