typeof(x)
- получить объект Type типа Literal, например typeof(int)
. Это константа времени выполнения.
Для object.GetType()
вам нужен экземпляр объекта.
if (x is IList)
Оператор is выполняет приведение, но возвращает bool в случае успеха или false, если x равен нулюили несовместимый тип. С
if (x is IList list)
Вы можете одновременно выполнять логический тест и приведение.
Не имеет смысла говорить о производительности, потому что это совершенно разные операции.
если вы хотите получить тип экземпляра объекта object.GetType()
- ваш единственный вариант, но вы можете проверить его снова с литералом типа, подобным
x.GetType() == typeof(List)
Хотя вы можете быть уверены, что
x.GetType() == typeof(IList)
всегда будет ложным, поскольку GetType никогда не будет возвращать тип интерфейса. Для этого теста вам понадобится
typeof(IList).IsAssignableFrom(x.GetType());