switch
allows you to check for one of several values on a single variable. if
statements allow arbitrary conditions, which can check a single variable or many. Hence, switch
is unsuited for what you are trying to do.
There are a few obvious options:
- Use a series of
if ... else if
statements
- Use some fancier construct such as a lookup dictionary mapping to methods (
Dictionary<RadioButton,Func<>>
might be a good place to start), though if you are unfamiliar with such constructs as switch I'd strongly recommend against that (it's the old "you have to learn to walk before you start to run")
- Iterate over the radio buttons and do your magic inside a loop
Such a loop would look like:
foreach (Control c in this.Controls)
{
RadioButton rbtn = c as RadioButton;
if(rbtn != null)
{
// ... your code to work with 'rbtn' goes here ...
if (rbtn.Checked)
{
// ...
}
}
}
Using as
rather than is
followed by an explicit cast is idiomatic, and also saves you a cast; null checking is almost certainly faster, and certainly not slower, than casting. The as
operator gives you null
if the given value cannot be cast to the given type. In the case where the value of the variable you are working can be changed from another thread (not likely in this case, but possible in other cases), it also saves you the headache of a nigh-impossible-to-reproduce bug when something changes the value of the variable out under your feet.
A set of if
statements to do the same thing would be along the lines of
if (radioButton9.Checked)
{
// do something
}
else if (radioButton10.Checked)
{
// do something
}
Using else if
mimics the behavior of a switch ... case ... break
construct. If they are independent, simply omit the else
. (Then, I'd suggest adding a blank line between the end of the if statement-block and the next if statement, for readability.)