I have a class that contains three local variables. I need to write a
method that updates one of these at a time based on a condition. I would
like to do this without writing a bunch of redundant code. For a very
simplified example:
private string x,y,z;
private void update(DayOfWeek d, int t)
{
switch(d)
{
case d.Monday:
switch (t)
{
case 1:
//update variable "x"
break;
case 2:
//update variable "y"
break;
}
case d.Tuesday:
switch (t)
{
case 1:
//update variable "x"
break;
case 2:
//update variable "y"
break;
}
// ...and so on for the remaining days of the week
}
}
I want to be able to simply call another method in order to eliminate
the nested switch block, but am unsure about how to go about this.
Can anybody help me? Thanks!
Phil,
Why not just pass the variable that you want modified by ref, instead of
t? Then all you need is one switch statement, and you just update the
variable appropriately.
Hope this helps.

Signature
- Nicholas Paldino [.NET/C# MVP]
- mvp@spam.guard.caspershouse.com
>I have a class that contains three local variables. I need to write a
> method that updates one of these at a time based on a condition. I would
[quoted text clipped - 37 lines]
>
> *** Sent via Developersdex http://www.developersdex.com ***
Phil Townsend - 31 Aug 2006 18:43 GMT
Here is a better example of what I want to do.
foreach (TimeEntry t in TimeEntries)
{
_Total += t.Duration;
switch (_Categories[t.CategoryId].CategoryType)
{
case 0:
_DirectTotal += t.Duration;
AddTime(ref DirectEntries, t);
switch (t.DateCreated.DayOfWeek)
{
case DayOfWeek.Friday:
_DirectFridayTotal += t.Duration;
break;
case DayOfWeek.Monday:
_DirectMondayTotal += t.Duration;
break;
case DayOfWeek.Saturday:
_DirectSaturdayTotal += t.Duration;
break;
// and so on for the reaminder of the week
default: break;
}
break;
case 1:
_IndirectTotal += t.Duration;
AddTime(ref IndirectEntries, t);
switch (t.DateCreated.DayOfWeek)
{
case DayOfWeek.Friday:
_IndirectFridayTotal += t.Duration;
break;
case DayOfWeek.Monday:
_IndirectMondayTotal += t.Duration;
break;
case DayOfWeek.Saturday:
_IndirectSaturdayTotal += t.Duration;
break;
// and so on for the reaminder of the week
default: break;
}
break;
}
}
I am trying to figure out a way to avoid all the nested switch blocks
and how to figure out which variable to update... thx!
Bruce Wood - 31 Aug 2006 18:51 GMT
> Here is a better example of what I want to do.
>
[quoted text clipped - 48 lines]
> I am trying to figure out a way to avoid all the nested switch blocks
> and how to figure out which variable to update... thx!
Well, for starters, why have separate fields for _DirectFridayTotal,
_DirectMondayTotal, etc. Why not have:
private int[] _DirectTotals = new int[7];
then you can do this:
this._DirectTotals[t.DateCreated.DayOfWeek] += t.Duration;