Thursday 20 September 2018

How to solve Operator '==' cannot be applied to operands of type 'T'

In this post we are going to see how to compare a field or property which have type as T Generic. Generally if you try to compare Generic types with ==,!= operator it will results in Operator == or != cannot be applied to operands of Type 'T'

For example:
********************

  public class Node<T>
    {
        private T _data;
        private Node<T> _next;
        private Node<T> _prev;

        public T Data
        {
            get { return _data; }
            set { _data = value; }
        }

        public Node<T> Next
        {
            get { return _next; }
            set { _next = value; }
        }

        public Node<T> Previous
        {
            get { return _prev; }
            set { _prev = value; }
        }

        public Node(T value):this(value,null, null)
        {
           
        }

        public Node(T value, Node<T> next, Node<T> prev)
        {
            this._data = value;
            this._next = next;
            this._prev = prev;
        }
    }


public Node<T> AddBefore(Node<T> element, T value)
   {
            var tempNode1 = new Node<T>(value);
            var tempNode2 = new Node<T>(value);

            if(tempNode1.Data == tempNode2.Data) { 
              
            }
         
   } 


In the above example if you see the line , if(tempNode1.Data == tempNode2.Data) { where we compare the two T type with == operator now this will return a compile time error.

To resolve this error we have to use EqualityComparer

if(EqualityComparer<T>.Default.Equals(tempNode1.Data,tempNode2.Data))

{

}


so the result method will be
public Node<T> AddBefore(Node<T> element, T value)
{
            var tempNode1 = new Node<T>(value);
            var tempNode2 = new Node<T>(value);

            if(EqualityComparer<T>.Default.Equals(tempNode1.Data,tempNode2.Data)) { 
              
            }
         


From this post you can learn how to solve operator '==' cannot be applied to operands of type 'T'

Sunday 16 September 2018

Singleton deisgn pattern in c# Lazy and Eager initialization

In this post we are going to see how to create a singleton class in eager and lazy initialization concepts in c#

Key things to remember for singleton is
1. Private constructor
2. Static Property to get the instance
3. Backing field should be readonly static
4.  Singleton class should be sealed

Lazy Initialization
*************************
First we create lazy initialization of singleton class

public sealed class EmployeeSingleton
    {
        private static readonly Lazy<EmployeeSingleton> _instance = new
                    Lazy<EmployeeSingleton>(() => new EmployeeSingleton());

        private EmployeeSingleton() { }

        public static EmployeeSingleton Instance
        {
            get
            {
                return _instance.Value;
            }
        }

        public void Log(string message)
        {
            Console.WriteLine(message);
        }


    }



Eager Initialization
**************************

    public sealed class DepartmentSingleton
    {
        private static readonly DepartmentSingleton _instance = new
                                             DepartmentSingleton();

        private DepartmentSingleton()
        {

        }

        public static DepartmentSingleton Instance
        {
            get
            {
                return _instance;
            }
        }

        public void Log(string message)
        {
            Console.WriteLine(message);
        }

    }


Main program:
**************

static void Main(string[] args)
        {
            EmployeeSingleton obj1 = EmployeeSingleton.Instance;
            DepartmentSingleton obj2 = DepartmentSingleton.Instance;

            obj1.Log("test 1");
            obj2.Log("test 2");

            Console.Read();


        }

From this post you can learn how to create a singleton design pattern in c# lazy and eager initialization.



Delete a Queue in Microsoft Azure storage account.

In this post we are going to see how to delete a queue in Microsoft Azure storage account.

Install the Following package
1. WindowsAzure.Storage
2. Install-Package Microsoft.WindowsAzure.ConfigurationManager -Version 3.2.3

class Program
    {

        // Nuget Packages
        // -Install-Package Microsoft.WindowsAzure.ConfigurationManager -Version 3.2.3
        static void Main(string[] args)
        {
            CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("azureStorageAccount"));
            var queueClient = account.CreateCloudQueueClient();

            /* Get the reference of the queue */
            var testQueue = queueClient.GetQueueReference("testingqueue");

            /* Deleting the queue if exists */
            testQueue.DeleteIfExists();

        }

    }

From the above code you can learn how to delete a queue in Microsoft Azure storage account.

Create a Queue in Microsoft Azure storage account and send message to it

In this post we are going to see how to create a queue in Microsoft Azure storage account and send the message to that queue. First we have to configure the connectionstring of the storage account in the appsetting of app.config.

Install the Following package
1. WindowsAzure.Storage
2. Install-Package Microsoft.WindowsAzure.ConfigurationManager -Version 3.2.3

Queue name should be lower case otherwise it will return bad request.

Please see this link for Queue naming rules: https://msdn.microsoft.com/en-us/library/azure/dd179349.aspx.

After installing above two packages now start the coding.

class Program
    {

        static void Main(string[] args)
        {
            CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("azureStorageAccount"));

            var queueClient = account.CreateCloudQueueClient();

            /* Get the reference of the queue */
            var testQueue = queueClient.GetQueueReference("testingqueue");

            /* Create a Queue if not exists */
            testQueue.CreateIfNotExists();

            CloudQueueMessage message = new CloudQueueMessage("Hai sample");

            /* Adding a message to Queue */
            testQueue.AddMessage(message);


        }

    }

use the Microsoft Azure storage Explorer for viewing the queue message.
https://azure.microsoft.com/en-us/features/storage-explorer/


Output:
************





From this post you can learn how to create a queue in Microsoft Azure storage account and send the message to that queue.