Blog RegisterLogin
Menu
 
Hosted by Webhost4life
Tags: IT , Blog , .Net , C# , Collections
Blog
<<  T-SQL split function  |  Home  |  iFinity FriendlyUrl Provider & GoogleSiteMap  >>

Jan 8

Written by: Tomasz Modelski
2009-01-08 14:56:00Z 

In my current work I need list with unique values -I need to keep insertion order on the list, interate through it, and to ensure it has only uniqe values.

Update: New version of ListUnique is here: http://it.tmod.pl/Blog/EntryId/201/ListUnique-generic-List-with-unique-values-in-Net-C-part-2.aspx

So, I've created ListUnique class with IListUnique interface, just by inheriting from List and overriding 2 methods.

Below is ListUnique class with IListUnique code, and unit test codes:

using System;
using System.Collections.Generic;
namespace TM.Utils.Collections
{
    ///


    /// List that allows only unique values
    ///

    /// Must implement IComparable
    public class ListUnique : List, IListUnique where T : IComparable
    {
        public new void Add(T item)
        {   
            if( Exists(itemList => itemList.CompareTo(item) == 0) )
            {
                throw new ArgumentException("Cannot add not unique value to collection");
            }
            base.Add(item);
        }
        public List ToList()
        {
            return this;
        }
        public ListUnique(IEnumerable collection)
        {
            foreach (T t in collection)
            {
                Add(t);
            }
        }
        public ListUnique(int capacity): base(capacity)
        {
        }
        public ListUnique()
        {
        }
    }
    ///
    /// IList that allows only unique values
    ///

    /// Must implement IComparable
    public interface IListUnique : IList where T : IComparable
    {
        List ToList();
    }
}
using System;
using System.Collections.Generic;
using NUnit.Framework;
using TM.Utils.Collections;
namespace TM.Utils.Tests.Collections
{
    [TestFixture]
    public class ListUnique_Test
    {
        [Test]
        public void CreateNew()
        {
            IListUnique listUnique = new ListUnique();
        }
        [Test]
        public void AddUniqueValues()
        {
            IListUnique listUnique = new ListUnique();
            listUnique.Add("a");
            listUnique.Add("b");
            listUnique.Add("c");
            listUnique.Add("d");
            Assert.AreEqual(4,listUnique.Count);
            Assert.AreEqual("a",listUnique[0]);
            Assert.AreEqual("d", listUnique[3]);
        }
        [Test]
        public void CreateFromUniqueList()
        {
            List list=new List();
            list.Add("a");
            list.Add("b");
            list.Add("c");
            list.Add("d");
            IListUnique listUnique = new ListUnique(list);
            Assert.AreEqual(4, listUnique.Count);
            Assert.AreEqual("a", listUnique[0]);
            Assert.AreEqual("d", listUnique[3]);
        }
        [Test]
        [ExpectedException(typeof(ArgumentException))]
        public void AddNonUnique()
        {
            IListUnique listUnique = new ListUnique();
            listUnique.Add("a");
            listUnique.Add("b");
            listUnique.Add("b");
            listUnique.Add("d");
            Assert.AreEqual(3, listUnique.Count);
            Assert.AreEqual("a", listUnique[0]);
            Assert.AreEqual("d", listUnique[2]);
        }
        [Test]
        [ExpectedException(typeof(ArgumentException))]
        public void CreateFromNotUniqueList()
        {
            List list = new List();
            list.Add("a");
            list.Add("b");
            list.Add("b");
            list.Add("d");
            IListUnique listUnique = new ListUnique(list);
            Assert.AreEqual(3, listUnique.Count);
            Assert.AreEqual("a", listUnique[0]);
            Assert.AreEqual("d", listUnique[2]);
        }
    }
}

Tags:

1 comment(s) so far...

Re: ListUnique - generic List with unique values in .Net / C#

search
[url=http://www.google.com] search [/url]
[LINK=http://www.google.com/]search [/LINK]
www.google.com

By rob on   2010-02-02 14:40:08Z

Your name:
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Security Code
Enter the code shown above in the box below
Add Comment   Cancel 
 
Related content
 
Search_Blog
 
Blog Tags
 
Blog_Archive
 
Related