Arraylist and generics don’t mix with IEnumerable(Of T).GetEnumerator.
The other day I was writing an in-house tool to assist in some upgrades we were performing on client installations. This tool was supposed to perform its operations on a batch of items, and display the results upon completion.
Since processing this batch of items was a lengthy endeavor, I wanted the failure to process one of the items to simply be recorded and allow the processing of the others to continue. Part of the processing of each item was a call to multiple web services, so I would need a way to handle the collection of errors along the way and make them available for their eventual display.
I had what I thought was a clever idea: a private Arraylist of exceptions that occurred during processing.
[vbnet]
Public Class BatchExceptions
Implements ICollection(Of System.Exception)
Private mExceptionlist As ArrayList
.
.
.
End Class
[/vbnet]
That way, I could simply iterate over the list and perform the standard exception handling, like so:
[vbnet]
Dim exc As Exception
For Each exc In BatchExceptions
HandleError(exc)
Next
[/vbnet]
Of course, in order to make use of the “For Each” construct, I had to implement the GetEnumerator of the ICollection interface.
[vbnet]
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Exception) _
Implements System.Collections.Generic.IEnumerable(Of System.Exception).GetEnumerator
Return (mExceptionlist.GetEnumerator)
End Function
[/vbnet]
Cool. Only one problem:
That was OK though, because I was using generics after all. The compiler was being helpful and reminding me that I had to specify ‘IEnumerator(Of Exception)’:
[vbnet]
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Exception) _
Implements System.Collections.Generic.IEnumerable(Of System.Exception).GetEnumerator
Return (DirectCast(mExceptionlist.GetEnumerator, IEnumerator(Of Exception)))
End Function
[/vbnet]
Everything compiled fine, but at run-time I got the following RTE:
Unable to cast object of type ‘ArrayListEnumeratorSimple’ to type ‘System.Collections.Generic.IEnumerator`1[System.Exception]‘.
This was frustrating. It seemed like the compiler failed to warn me of this incompatibility, and simply kicked the can on down the road to the run-time to deal with.
Solution:
Well, I did a little poking around and finally ended up replacing my Arraylist with a list like so:
[vbnet]
private mExceptionlist as System.Collections.Generic.list
[/vbnet]
Well, that did the trick but I can’t say it was as intuitive as it would seem. It makes sense, in hindsight, but why did I have to get some cryptic RTE? Why couldn’t the compiler have picked up on my use of an ArrayList and say, “Hey dummy - use a generic list!”? Still, I have a new trick to toss in my bag for the time I want to implement an enumerator on an Arraylist!
Related Posts - IE7 WebControl TreeView line gap in quirks mode. I've been writing a subclass of the MS Webcontrol.TreeView control for one of our Web Applications at work. I figured this would be a fairly easy task, since I only...
- Free Firewall Recommendations (Protect Yourself Online With These Free Firewalls) If your home computer is connected to the internet, or to other computers that are connected to the internet - you need a firewall. It's as simple as that. Hackers...
- Google Chrome: the OS. Google announced last Tuesday that it has its sights on dethroning Microsoft as desktop OS king: "The new operating system, announced late Tuesday night on Google's Web site, will be...
- 10 Useful, Often Overlooked HTML Tags. Pop quiz: When would you use the <wbr> tag, and what does it do? Yeah, I had no idea either. In fact, I had never even seen this tag before,...
- Microsoft FxCop doesn't like Microsoft generated code! The other day I thought it might be nice to "do the right thing" and give my code a run against Microsoft's FxCop. I ran it right out of the...
Related Websites - Kiss and Tell: Carmen Shirkey on Her Hero Today's article is written by romance author Carmen Shirkey. Okay, I decided to risk embarrassing Jim and participate in your new Kiss & Tell feature. :) My book, The List, is about a woman who has a ridiculously long list of characteristics she wants in her future boyfriend/husband. That was......
- How To Improve Your Websites Usability The number one factor that makes or breaks your websites and blogs, is whether or not people can use it. This is typically referred to as your blog’s usability. It seems simple enough, if visitors to your site can’t do what you would like them to do (buy things, subscribe,......
- The Perfect Process - Guaranteed to Work - Every Time! Every week we work with many of you to develop the next most important process in your company.Many of the common ones are:- Lead Management Process- Lead Distribution Process- Sales Process- Customer Service Process- Service Delivery ProcessSo once we get this process designed, the people trained and the necessary......
- Grocery Store Savings Tips Few spending categories can kill a budget faster than food. For some families the art of frugal grocery shopping comes naturally. We have to work a little harder, but over time we have developed a few tips to help navigate the grocery aisles. Sign up for customer loyalty programs. Larger......
- Top Ten Tips for Guiding a Successful IP Telephony Implementation Top Ten Tips for Guiding a Successful IP Telephony Implementation Often when an organization considers change that will impact every employee— such as an enterprise-wide IP telephony implementation—the process tends to focus on hardware, software, and getting the technology up to speed as quickly as possible. However, a company’s infrastructure......



