Why am I getting this error, and how do I properly fix it? Error Option Strict On disallows implicit conversions from 'System.Collections.IDictionary' to 'System.Collections.Hashtable'


I am a former Java programmer that is getting back into .NET after some time off.  I had worked with C# before, and prefer it over VB.NET, but this is what we are using to build right now.  Isn't a Hashtable a subclass of an IDictionary interface?  If so, why is it not allowing me to convert it, and how do I do so?

Since there is a critical time component to this, I am awarding 500 pts to anyone who can specify exactly how to fix this issue...

Thanks for all your help.
Who is Participating?
Carl TawnConnect With a Mentor Systems and Integration DeveloperCommented:
Can't you just declare the parameter as IDictionary rather than HashTable, and do the cast inside the routine:

    Protected Function SaveHashItem (ByRef htpage As IDictionary, ByVal oobj As Object) As Hashtable
turn option strict off
louisiana_bluesAuthor Commented:
I would rather not do this.  It brings into play all other kinds of potentially sloppy programming tactics.  Is there a better solution?
Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

Carl TawnSystems and Integration DeveloperCommented:
What code are you using ? Then following works fine for me with Option Strict On:

        Dim hsh As New Hashtable
        Dim id As IDictionary = hsh
Jeff CertainCommented:
Could you post the actual line of code that is throwing your error, along with the relevant variable declarations?

Also, are you using VS2003 or VS2005?
louisiana_bluesAuthor Commented:
Dim htpagevalues as IDictionary = New Hashtable()

Is fine.  Sorry, I should have expanded on this.  I call numerous functions ByRef, such as (function stub)

Protected Function SaveHashItem (ByRef htpage As Hashtable, ByVal oobj As Object) As Hashtable

The above function must work with hashtables and return a hashtable.

But when I do:

htpagevalues = SaveHashItem (htpagevalues, osomeobject)

I get the errors.  I'm not sure whether I should be CTyping the values on the call to the function?  Or should I change the function stubs (either way is a LOT of stupid work!) to work with IDictionary and CTYpe to hashtable inside the functions?  Or is there a better way?

Does that make any more sense?
Jeff CertainConnect With a Mentor Commented:
What about declaring your variable as a hashtable in the first place?
Dim htpagevalues as New Hashtable()

The cast it is having issues with is a cast from IDictionary -> HashTable (in the function parameter).

As another note, if you're passing ByRef, you could just use a Sub, no?
Protected Sub SaveHashItem (ByRef htpage As Hashtable, ByVal oobj As Object)

SaveHashItem (htpagevalues, osomeobject)
louisiana_bluesAuthor Commented:
No, can't do that...or I already would've. ;-)  The engine I built uses multiple types of IDictionary items.  It just so happens in this case I am working with hashtables....

And yes, if I wanted to create a maintenance nightmare, I could just use a sub...which would not make it *clear* to another programmer from looking at the code that it is changed inside a function.  It's why I prefer C#, but this is what we are working with, so...

louisiana_bluesAuthor Commented:
Well, here's part of the problem with that (and I think you *meant* 'Protected Function SaveHashItem (ByRef htpage As IDictionary, ByVal oobj As Object) As IDICTIONARY') ).

I also have an arraylist (another IDictionary object), that contains a list of IDictionary items that are Hashtables.

So, when I try to keep all items of type IDictionary (which I agree would be the best way to do this) *outside* functions that specifically do Hashtable work, I still have issues like this:

Well, hold on.  I think I can do exactly that.

I am going to award points (and an A!) for the timeliness and feedback to you Carl.  Thank you so much for your help!
louisiana_bluesAuthor Commented:
And also Chaosian for helping out too.  Thanks you both very much.  Hope you do not mind sharing...
Jeff CertainCommented:
I hate sharing... just give Carl all the points :)

Seriously, though... glad we could help.

All Courses

From novice to tech pro — start learning today.