At least one object must implement IComparable


At least one object must implement IComparable
First of all, if there is any one doesn’t like this kind of emails, please feel free to say so in a private email , and I will not send again to him/her any more J

now, under the namespace System.Collections.Generic, there is more than one class that I love, and really I mean it, I love them all, one of them is SortedDictionary class.

The SortedDictionary is a Key/Value pairs sorted on the key, the key and the value can be any object type.
I created a simple class and I want its objects to be added in to a SortedDictionary object as a key.
/// my class
class MyClass
    {
        private string _myClassName;

        public string MyClassName
        {
            get { return _myClassName; }
            private set { _myClassName = value; }
        }

        public MyClass(string className)
        {
            MyClassName = className;
        }
    }

 /// adding my class to the SortedDictionary Object
MyClass mc = new MyClass("myClassName");
MyClass anotherMc = new MyClass("myClassNameAgain");

SortedDictionary<MyClass, string> SD = new SortedDictionary<MyClass, string>();
SD.Add(mc, mc.MyClassName);
SD.Add(anotherMc, anotherMc.MyClassName);

The first item will be added smooth, there is no complain from the compiler, the second Item the compiler will rise an argument exception “At least one object must implement IComparable”
First we have to understand why this exception is raised?
When we added the first item “mc” there was no other items into the SortedDictionary object, so the SortedDictionary object does not need to sort anything yet. But when we try to add the next item “anotherMc” , the SortedDictionary object try to sort them, actually it try to compare between them.
But I didn’t provide any method to compare between 2 objects from my class.
So the compiler asked me to implement IComparable Interface.
My class after implementing IComparable Interface

  class MyClass : IComparable<MyClass>
    {
        private string _myClassName;

        public string MyClassName
        {
            get { return _myClassName; }
            private set { _myClassName = value; }
        }

        public MyClass(string className)
        {
            MyClassName = className;
        }



        #region IComparable<MyClass> Members

        public int CompareTo(MyClass other)
        {
            if (Equals(other))
                return 0;
            else
                return MyClassName.CompareTo(other.MyClassName);
        }

        #endregion
    }

No I will define the equality if the same object has been added twice
or the name of the first object MyClassName are the same as the second object.

now you can add your objects into the sortedDictionary collection class 

filter attribute that checks whether current connection is secured

using APS.net Core to mark all website pages working with https protocol we will do this using IAuthorizationFilter. and here is an exampl...