c# проверяют на точный тип [дубликат]

Если в вашем find отсутствует опция cmin, вы можете touch файл с отметкой времени 1 час назад и использовать find с -newer.

24
задан shA.t 5 February 2019 в 06:43
поделиться

5 ответов

b.GetType() == typeof(A)
44
ответ дан 28 November 2019 в 22:30
поделиться

(b is A) проверяет b на совместимость типов с A, что означает, что он проверяет как иерархию наследования b, так и реализованные интерфейсы для типа A.

b.GetType() == typeof(A), с другой стороны, проверяет точный того же типа. Если вы не квалифицируете типы далее (то есть приведение), то вы проверяете объявленный тип b.

В любом случае (используя любой из вышеперечисленных) вы получите true, если b - точный тип А.

Будьте внимательны, чтобы знать, почему вы хотите использовать точные типы в одной ситуации, а не в другой:

  • Например, для проверки точных типов побеждает цель ОО-полиморфизма, которую вы, возможно, не захотите делать в конечном итоге. .
  • Однако, например, если вы реализуете специализированный шаблон разработки программного обеспечения, такой как Inversion of Control IoC-контейнер, вам иногда захочется работать с точными типами.

Редактировать:

В вашем примере,

if(b is A) // this should return false

превратить его в точную объявленную проверку типа, используя:

if (b.GetType() == typeof(A))
11
ответ дан 28 November 2019 в 22:30
поделиться

использовать:

if (b.GetType() == typeof(A)) // this returns false
8
ответ дан 28 November 2019 в 22:30
поделиться

Ваш пример кода кажется противоположным вашему вопросу.

bool isExactTypeOrInherited = b is A;
bool isExactType = b.GetType() == a.GetType();
4
ответ дан 28 November 2019 в 22:30
поделиться
bool IsSameType(object o, Type t) {
  return o.GetType() == t;
}

Затем вы можете вызвать метод следующим образом:

IsSameType(b, typeof(A));
3
ответ дан 28 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: