In C#, is it possible to check if a variable is of a specific type that uses a generic, without knowing what that generic is? For example, the code
using System;
using System.Collections.Generic;
public static class Program {
public static void Main(string[] args) {
List<string> list = new List<string>();
if (list is List<object>)
Console.WriteLine("Success");
else
Console.WriteLine("Failure");
}
}
outputs failure even though string inherits from object. How can I make this program recognise that list is of type List<T> without knowing what T is?
>Solution :
You can do it with a help of GetGenericTypeDefinition() method to strip generic T from List<T> and have List<> type (note abscence of T and empty <>) to compare with:
if (list.GetType().GetGenericTypeDefinition() == typeof(List<>))
Console.WriteLine("Success");
else
Console.WriteLine("Failure");