Bitwise 'OR' with enumeration
I cant believe Ive never covered this before, but sometimes I see functions which take enumerations as arguments such as:
Code:
FileStream fStream = new FileStream("myfile.txt", FileMode.OpenOrCreate, FileAccess.Read | FileAccess.Write);
And I was just curious as to how that enumeration is implemented inside a particular function. Does it use a switch - case block? Or if-else if-else block? Im creating a new exception handling framework and was curious as to how I could implement the bitwise OR operator with my own enumerations. Like so:
Code:
// ExceptionPolicy is a custom static class which handles exceptions
// Handle will handle the exception in the way specified by the ExceptionMedium enumeration
// ExceptionMedium.EventLog tells the Handle method to write the exception data to the windows event log
// ExceptionMedium.Report opens a report dialog allowing the user to report the exception to our
// internal databases
ExceptionPolicy.Handle(myException, ExceptionMedium.EventLog | ExceptionMedium.Report);
Re: Bitwise 'OR' with enumeration
It all starts with setting the [Flags] attribute on the enum.
http://msdn.microsoft.com/en-us/libr...attribute.aspx
Re: Bitwise 'OR' with enumeration
They likely AND the supplied value with a single enum value to see if it exists. For example:
Code:
enum Foo
{
A = 1,
B = 2,
C = 4,
D = 8
}
// ...
void SomeFunc( Foo arg )
{
if ( (arg & Foo.A ) == Foo.A ) // you could also check for > 0
{
// 'arg' contains Foo.A
}
}
You don't actually need the Flags attribute.
Re: Bitwise 'OR' with enumeration
Awesome, I knew there had to be some trick... if I only knew my bitwise operators a bit better but alas I dont use them very often.
Thanks
Re: Bitwise 'OR' with enumeration
Quote:
Originally Posted by
RaleTheBlade
Awesome, I knew there had to be some trick... if I only knew my bitwise operators a bit better but alas I dont use them very often.
Thanks
Yeah, you can code many applications in C# without manipulating bits, but any programmer really should know this stuff as it eventually crops up. I do a fair amount of image processing in my work so it comes up often.