If (T is classname) не работает: T это тип, который недействителен в данном контексте

Я хочу проверить, является ли общий тип T классом Student или чем-то еще.

в заявлении If я делаю это:

if (T is Student)
{
    // Do sth.
}

и он не компилируется и говорит:

T - это тип, который недействителен в данном контексте

Я знаю, что код ниже будет работать вместо этого:

if (typeof(T) == typeof(Student))
{
    // Do sth.
}

Но мне просто понравилось использовать ключевое слово is, потому что оно делает мой код более читабельным.

В чем причина этой ошибки и есть ли способ использовать это или нет?

но is работает только для примера ... вы не можете сделать Type1 is Type2 вы можете только сделать instance is Type

Selvin 22.11.2022 13:01

Помимо синтаксической проблемы у вас также есть семантическая проблема: дженерики, как следует из названия, должны работать для всех типов. Выполнение любых проверок типов для параметра типа в значительной степени противоречит их идее.

MakePeaceGreatAgain 22.11.2022 13:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В чем причина этой ошибки?

Причина в том, что вы спрашиваете, является ли определенный Type (или может быть) чем-то другим, кроме типа Type. и ответ однозначно НЕТ.

и есть ли способ использовать это или нет?

Да, но для этого вам понадобится экземпляр объекта, например T myObject, тогда вы можете спросить

if (myObject is Student)
{
    // Do sth.
}

Представьте себе реальный сценарий, в котором у вас есть человек по имени Питер. Петр является примером типа человека. В вашем примере вы пытаетесь спросить: "если человек студент...". что довольно сложно понять или на языке компилятора:

недействителен в данном контексте

тогда как вопрос «если Питер студент..» звучит гораздо более понятно, даже для компилятора С#;)

Спасибо за исчерпывающий ответ, кстати, "если студент - человек" будет иметь смысл... Но я понял, спасибо.

Parsa 24.11.2022 16:38

Другие вопросы по теме