Introduction
Often when machines communicate with humans there is the need of switch statements. "The switch statement is a control statement that handles multiple selections and enumerations by passing control to one of the case statements within its body" (MSDN). These cases must always be constants and of an integral type. That means that doubles and floats can't be used and all other values must be constants.
This code uses templates and delegates to create a simple switch
like structure that can be used for any type of case. The cases are sorted in a SortedList<TKey, TValue>
.
The code uses anonymous methods to do the work in the case
statements.
Using the code
In the sample code below, a message box is shown for each case.
Switch<string> switcher = new Switch<string>(); switcher.AddCase("Hello", delegate(object[] args) { MessageBox.Show("Hello"); });
switcher.AddCase("Goodbye", delegate(object[] args)
{ MessageBox.Show("Goodbye"); });
switcher.AddCase("Morning", delegate(object[] args)
{ MessageBox.Show("Morning"); });
switcher.AddCase("Evening", delegate(object[] args)
{ MessageBox.Show("Evening"); });
switcher.AddCase("Afternoon", delegate(object[] args)
{ MessageBox.Show("Afternoon"); });
switcher.AddDefault(delegate (object [] args)
{ MessageBox.Show("Default"); });switcher.DoSwitch(StringTextBox.Text);
I made a class for doubles also. This version allows you to give a tolerance of how much the value can vary.
DoubleSwitch switcher = new DoubleSwitch();switcher.AddCase(1, delegate(object[] args) { MessageBox.Show("1"); });
switcher.AddCase(2, delegate(object[] args)
{ MessageBox.Show("2"); });
switcher.AddCase(2.5, delegate(object[] args)
{ MessageBox.Show("2.5"); });
switcher.AddCase(3, delegate(object[] args)
{ MessageBox.Show("3"); });
switcher.AddCase(1000, delegate(object[] args)
{ MessageBox.Show("1000"); });
switcher.AddDefault(delegate (object [] args)
{ MessageBox.Show("Default"); });switcher.DoSwitch((double) DoubleTextBox.Value, 0.1d);
The above code allows a tolerance of 0.1. That means that 2.59 will invoke the 2.5 case...
Further, specific classes are possible, they simply need to be derived from the base class and the function "DoSwitch
" needs to be implemented.
Try the demo program to get a bit more of an idea...
History
This is the first version... Enjoy!