accessing a variable

  • Thread starter Thread starter Phil Townsend
  • Start date Start date
P

Phil Townsend

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.
 
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!
 
Phil said:
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!

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;
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top