Code Heaven For C# Developer

Wednesday, May 18, 2011

Difference between Hashtable and Dictionary

When we want a collection data structure to hold data as key/value pairs, we have two obvious choices.

1. Dictionary

2. Hashtable

So basically what is the difference between both this and when to use which. Lets check it out. Point by Point.

1) Generics

Dictionary is a generic type, Hashtable is not. Now what that means. This is the most important aspect one should consider when taking decision. Dictionary is a generic type means

- You get type safety with Dictionary, because you can't insert any random object into it, and you don't have to cast the values you take out.

- And also generic collections are a lot faster as there's no boxing/unboxing

- Hashtable uses Object to hold things internally (Only non-generic way to do it). So you have to take care of type safety and cast it to appropriate data type when you take it out, but it also means that you can add keys and values of any type ( It is good or bad, well it depends :) )

- Again Hashtable also have to box/unbox, which may have memory consumption as well as performance penalties.

2) Thread Safety :

In .Net Hashtable is thread safe for use by multiple reader threads and a single writing thread, while in Dictionary public static members are thread safe, but any instance members are not guaranteed to be thread safe.

One more thing that can make difference is, we can not use dictionary (generics) with web services. The reason is no web service standard supports generics standard.

Labels:

Extension Methods in C#

I would like to introduce one of the new C# 3.0 enhancements “Extension Methods” and so on. This feature is available in C # 3.0 compilers and further versions (C# 4.0); this feature is very important for all developers especially if you would like to use the dynamism of the C# enhancements to take place in your class design.

An extension method is a special kind of static method that allows you to add new methods to existing types without creating derived types.

How to Create my Extension Method?

Simply, you create your own static method in your class and put this keyword in front of the first parameter in this method (the type that will be extended).


public static class MyMathExtension
{
public static int factorial(this int x)
{
if (x <= 1) return 1;
if (x == 2) return 2;
else
return x * factorial(x - 1);
}
}


Complete Code for My Demo

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int x = 3;
Console.WriteLine(x.factorial());
Console.ReadLine();
}
}
public static class MyMathExtension
{
public static int factorial(this int x)
{
if (x <= 1) return 1;
if (x == 2) return 2;
else
return x * factorial(x - 1);
}
}
}

Cheers....!!!!!!!

Labels: