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'

Posted on 2006-07-21
Last Modified: 2010-04-23

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.
Question by:louisiana_blues
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
  • 5
  • 3
  • 2
  • +1
LVL 11

Expert Comment

ID: 17155015
turn option strict off

Author Comment

ID: 17155034
I would rather not do this.  It brings into play all other kinds of potentially sloppy programming tactics.  Is there a better solution?
LVL 52

Expert Comment

by:Carl Tawn
ID: 17155100
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
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

LVL 24

Expert Comment

by:Jeff Certain
ID: 17155170
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?

Author Comment

ID: 17155205
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?
LVL 24

Assisted Solution

by:Jeff Certain
Jeff Certain earned 150 total points
ID: 17155252
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)

Author Comment

ID: 17155289
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...

LVL 52

Accepted Solution

Carl Tawn earned 350 total points
ID: 17155334
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

Author Comment

ID: 17155488
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!

Author Comment

ID: 17155497
And also Chaosian for helping out too.  Thanks you both very much.  Hope you do not mind sharing...
LVL 24

Expert Comment

by:Jeff Certain
ID: 17155521
I hate sharing... just give Carl all the points :)

Seriously, though... glad we could help.


Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

634 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