Используйте только as
и вместо этого проверьте нулевое значение:
C c = obj as C;
if (c != null)
something(c);
Он будет выполнять приведение только один раз.И as
, и is
на самом деле выполняют кастинг, поэтому на самом деле нет необходимости использовать их вместе.
При этом, кастинг относительно дешев.Любые потери производительности для приведения должны быть уменьшены реализацией something(c)
или something(b)
, поэтому не забывайте об этом, если только количество типов, к которым вы пытаетесь привести, не является действительно значительным.
Если вы находитесь вуправление классами A
, B
, C
, посмотрите, сможете ли вы переработать модель, чтобы вам вообще не приходилось выполнять приведение типов - используйте виртуальные методы, как предлагают другие.