[c#] C# Generics and Type Checking

I have a method that uses an IList<T> as a parameter. I need to check what the type of that T object is and do something based on it. I was trying to use the T value, but the compiler does not not allow it. My solution is the following:

private static string BuildClause<T>(IList<T> clause)
    if (clause.Count > 0)
        if (clause[0] is int || clause[0] is decimal)
           //do something
        else if (clause[0] is String)
           //do something else
        else if (...) //etc for all the types
           throw new ApplicationException("Invalid type");

There has to be a better way to do this. Is there some way I can check the type of T that is passed in and then use a switch statement?

This question is related to c# generics types

The answer is

You could use overloads:

public static string BuildClause(List<string> l){...}

public static string BuildClause(List<int> l){...}

public static string BuildClause<T>(List<T> l){...}

Or you could inspect the type of the generic parameter:

Type listType = typeof(T);
if(listType == typeof(int)){...}

Similar questions with c# tag:

Similar questions with generics tag:

Similar questions with types tag: