Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

how can i get back to tryp block after an exception was thrown?

Posted on 2009-05-06
10
Medium Priority
?
255 Views
Last Modified: 2013-12-17
hello experts,

i loop trought a DateTime[],
while looping i get current element,
i need the precedent elemnet too!
the prob is that for the first element there's no precendent.

i dont want to test if it's first to avoid the IndexOutOfException to raise,

my question:
what can i do, if there's a possibility, in order to continue the process after the Exception was
throws, is there a way to get back  to the try block with incrementing, the index, here 's my i variable?

i add the code,

all infos are welcome.
thanks in advance.
private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 0;
 
            try
            {
                for (int i = 1; i < aDrainDateList.Length; i++ )
                {
                    DateTime current_drain = aDrainDateList[index];
                    DateTime  last_drain = aDrainDateList[index-1];
                    _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                    _allDrains.Add(_tempDrain);
                }
            }catch(IndexOutOfRangeException)
            {
                
            }
 
            return _allDrains;
        }

Open in new window

0
Comment
Question by:toshi_
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
  • +1
10 Comments
 
LVL 8

Assisted Solution

by:OBonio
OBonio earned 400 total points
ID: 24313692
I would aim not to throw the exception!  Checking whether you are on the first element or not is far better than letting an exception be thrown!

That said, try this :



private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 0;
 
            for (int i = 1; i < aDrainDateList.Length; i++ )
            {
                DateTime current_drain = aDrainDateList[index];
                DateTime  last_drain;
                try
                {
                  last_drain = = aDrainDateList[index-1]; 
                } 
                catch(IndexOutOfRangeException)
                {
                  last_drain = null;
                }
 
                if(last_drain!=null)
                {
                  _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                  _allDrains.Add(_tempDrain);
                }
            }
 
            return _allDrains;
        }

Open in new window

0
 
LVL 16

Assisted Solution

by:CuteBug
CuteBug earned 400 total points
ID: 24313702
Place the try catch block within your for loop and in the catch section you can add continue;
private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 0;
 
            for (int i = 1; i < aDrainDateList.Length; i++ )
            {
                  try
                  {
                    DateTime current_drain = aDrainDateList[index];
                    DateTime  last_drain = aDrainDateList[index-1];
                    _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                    _allDrains.Add(_tempDrain);
                  }
                  catch(IndexOutOfRangeException){
                    continue;
                  }                
            }
 
            return _allDrains;
        }

Open in new window

0
 
LVL 9

Assisted Solution

by:tillgeffken
tillgeffken earned 400 total points
ID: 24313713
From my point of view its bad practice to aim for exceptions, that's why they're called exceptions. What's the purpose of this? Your Drain class requires a last_drain so why not skip it alltogther?

private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 1;
 
            try
            {
                for (int i = 2; i < aDrainDateList.Length; i++ )
                {
                    DateTime current_drain = aDrainDateList[index];
                    DateTime  last_drain = aDrainDateList[index-1];
                    _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                    _allDrains.Add(_tempDrain);
                }
            }catch(IndexOutOfRangeException)
            {
                
            }
 
            return _allDrains;
        }

Open in new window

0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
LVL 16

Expert Comment

by:CuteBug
ID: 24313722
Obonio's has provided a better solution.
0
 
LVL 9

Expert Comment

by:tillgeffken
ID: 24313763
I don't see the point in even processing index 0 when you already know that it can only fail.
0
 
LVL 16

Expert Comment

by:CuteBug
ID: 24313764
Another method is to loop backward. This will solve it altogether.

After the loop ends, just reverse the resultant array.
private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 0;
 
            try
            {
                for (int i = aDrainDateList.Length - 1; i > 0; i-- )
                {
                    DateTime current_drain = aDrainDateList[index];
                    DateTime  last_drain = aDrainDateList[index-1];
                    _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                    _allDrains.Add(_tempDrain);
                }
            }catch(IndexOutOfRangeException)
            {
                
            }
 
            // Reverse the order
            Array.Reverse(_allDrains);
 
            return _allDrains;
        }

Open in new window

0
 
LVL 4

Accepted Solution

by:
cauos earned 800 total points
ID: 24313813
yes Obonio's has provided a better solution.but the error occured in the index not index - 1 (he started the for loop from 1 )
 for (int i = 1; i < aDrainDateList.Length; i++ )
            {
                DateTime current_drain;
                DateTime  last_drain =aDrainDateList[index-1];                
                try
                {
                   current_drain = aDrainDateList[index];
                } 
                catch(IndexOutOfRangeException)
                {
                 current_drain= null;
                }
 
                if(current_drain!=null)
                {
                  _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                  _allDrains.Add(_tempDrain);
                }
            }

Open in new window

0
 
LVL 9

Expert Comment

by:tillgeffken
ID: 24313847
I still think there is no problem in the first place. You're creating one by trying to parse data of which you know that it doesn't exist. Or am i missing something?
0
 
LVL 4

Expert Comment

by:cauos
ID: 24313937
you right tillgeffken, there is no logic by doing this if he want to return the array list before end the method he can add the finally statement and return the array list.
private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
        {
            Drain _tempDrain = null;
            ArrayList _allDrains = new ArrayList();
            int index = 1;
 
            try
            {
                for (int i = 2; i < aDrainDateList.Length; i++ )
                {
                    DateTime current_drain = aDrainDateList[index];
                    DateTime  last_drain = aDrainDateList[index-1];
                    _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
                    _allDrains.Add(_tempDrain);
                }
            }catch(IndexOutOfRangeException)
            {
                
            }
        finally
         {
            return _allDrains;
         }
        }

Open in new window

0
 
LVL 9

Expert Comment

by:tillgeffken
ID: 24314014
Actually i left the Exception in there because i was too lazy to delete it. The following should be just fine (at least you won't get an IndexOutOfRangeException)

private ArrayList GetDrainsObj(DateTime[] aDrainDateList)
{
 Drain _tempDrain = null;
 ArrayList _allDrains = new ArrayList();
 int index = 1;
 
 for (int i = 2; i < aDrainDateList.Length; i++ )
 {
  DateTime current_drain = aDrainDateList[index];
  DateTime  last_drain = aDrainDateList[index-1];
  _tempDrain = new Drain(id_, Ecolog_.Id_int, current_drain, last_drain, DateTime.Now);
  _allDrains.Add(_tempDrain);
 }
 return _allDrains;
}

Open in new window

0

Featured Post

Is Your Team Achieving Their Full Potential?

74% of employees feel they are not achieving their full potential. With Linux Academy, not only will you strengthen your team's core competencies but also their knowledge of of the newest IT topics.

With new material every week, we'll make sure that you stay ahead of the game.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It seems a simple enough task, yet I see repeated questions asking how to do it: how to pass data between two forms. In this article, I will show you the different mechanisms available for you to do just that. This article is directed towards the .N…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question