Я немного запутался здесь.
Как уже отмечалось в других ответах, вы сравниваете яблоки и апельсины. ::rimshot::
Если вы хотите определить, принадлежит ли объект определенному типу, используйте оператор is
.
Если вы хотите сравнить строки, используйте оператор ==
(или другой подходящий метод сравнения, если вам нужно что-то необычное, например, сравнение без учета регистра).
Скорость выполнения одной операции по сравнению с другой (без каламбура) не имеет большого значения.
После более внимательного прочтения я думаю, что вы хотите сравнить скорость сравнения строк со скоростью сравнений ссылок (тип сравнения, используемый в базовом типе System.Object).
Если это так, то ответ таков: сравнение ссылок никогда не будет медленнее, чем любое другое сравнение строк. Сравнение ссылок в .NET во многом аналогично сравнению указателей в C - примерно так быстро, как вы можете.
Однако, как бы вы себя чувствовали, если бы строковая переменная s
имела значение "I'm a string"
, но следующее сравнение не удалось:
if (((object) s) == ((object) "I'm a string")) { ... }
Если вы просто сравнили ссылки, это может произойти в зависимости от того, как было создано значение s
. Если в итоге он не был интернирован, он не будет иметь ту же ссылку, что и буквальная строка, поэтому сравнение будет неудачным. Таким образом, у вас может быть более быстрое сравнение, которое не всегда работает. Это кажется плохой оптимизацией.