<

Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x

Trick when using Array.Contains() C# 2.0

Published on
10,959 Points
4,559 Views
4 Endorsements
Last Modified:
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this?
string[] stuff = ....;
if (stuff.Contains(“item”))
{
    ...
}

Open in new window


In .NET 3.5, this is possible out of the box (make sure you reference System.Core and include the System.Linq namespace) but if you try to run this code in .NET 2.0 or .NET 3.0, you will get errors. Nevertheless the .NET Framework 2.0 does provide a Contains() method on any Array object.

In the .NET Framework 2.0, System.Array implements the System.Collections.Generic.IList<T> interface. Unfortunately the implementation of the IList interface is provided at runtime, so we do not see the methods in Visual Studio and we cannot write array.Contains().

Instead, we have to cast the array to the appropriate IList interface:

string[] arr = new string[] { “RR US”, “RR India”, “RR UK” };
if (!((IList<string>)arr).Contains(“India”))
{
     System.Console.WriteLine ("Correct! We are working with RR India");
}

Open in new window


The documentation explains it as follows:

In the .NET Framework version 2.0, the Array class implements the System.Collections.Generic.IList, System.Collections.Generic.ICollection, and System.Collections.Generic.IEnumerable generic interfaces. The implementations are provided to arrays at run time, and therefore are not visible to the documentation build tools. As a result, the generic interfaces do not appear in the declaration syntax for the Array class, and there are no reference topics for interface members that are accessible only by casting an array to the generic interface type (explicit interface implementations). The key thing to be aware of when you cast an array to one of these interfaces is that members which add, insert, or remove elements throw NotSupportedException.


So next time, you can save yourself from writing (unnecessary) code like this:

bool found =false;
    foreach (string s in array)
    {
        if (s.Equals(“item”))
        {
            found =true;
            break;
        }
    }
    if (found)
    {
       ........
    }

Open in new window


Some of you guys might have an alternate solution for this.
For example

bool exists = Array.IndexOf(arr, "RR India") >= 0

Open in new window

No doubt this is an alternative solution solutions. This may differ in terms of performance. But, this is for c# 2.0 and as explained above .NET Framework 2.0 does provide a Contains() method on any Array object. So this may helpful for framework wise comparison.

Happy Programming!!!
4
Comment
[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
5 Comments
 

Expert Comment

by:RETAILREALM
This is good stuff. Great work!!!
0
 
LVL 18

Expert Comment

by:Rajar Ahmed
always good to have plan b for any solution .
i will definitely use this in future ...
thanks..
0
 
LVL 1

Expert Comment

by:apuma
I have found that in some cases using a dictionary object is useful, (as of 3.5?) you can call contains , or countainsKey to check either objects or keys. and since it is a based on a hashmap, the containskey is extremely fast in large lists [compared to standard arrays, lists].  since the dictionary constructor specifies the object type for the list you also maintain all the intelisense for the objects, as apposed to a standard hashmap (or is it hashtable?) which only returns Object class Objects
0
 
LVL 17

Expert Comment

by:nepaluz
The problem you describe is NOT limited to .NET 2.0, infact, the same happens with .NET 4.5 on arrays and arraylists. Lists dynamically typecast values inside them in LINQ whereas this is not the case with arrays. The cure you prescribe, though, is correct.
0
 
LVL 16

Expert Comment

by:Easwaran Paramasivam
Good findings!!
0

Featured Post

 [eBook] Windows Nano Server

Download this FREE eBook and learn all you need to get started with Windows Nano Server, including deployment options, remote management
and troubleshooting tips and tricks

Join & Write a Comment

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…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month