Это действительно зависит от того, знаете ли вы, что o
- это строка и то, что вы хотите с ней сделать.Если ваш комментарий означает, что o
действительно действительно представляет собой строку, я бы предпочел прямолинейный (string)o
- он вряд ли потерпит неудачу.
Самым большим преимуществом использования прямого литья является то, что когда он терпит неудачу, вы получаете InvalidCastException, что говорит вам в значительной степени о том, что пошло не так.
С оператором as
, если o
не является строкой, s
устанавливается в null
, что очень удобно, если вы не уверены и хотите проверить s
:
string s = o as string;
if (s == null)
{
// well that's not good!
gotoPlanB();
}
Однако, если вы не» т выполнить этот тест, вы будете использовать s
позже и получите бросок NullReferenceException. Они, как правило, более распространены, и лот сложнее отследить, как только они происходят в дикой природе, так как почти каждая строка разыгрывает переменную и может ее выбросить. С другой стороны, если вы пытаетесь применить к типу значения (любой примитив или структуры, такие как DateTime), вы должны использовать прямой литой - as
не будет работать.
В частном случае преобразования в строку, каждый объект имеет ToString
, так что ваш третий метод может быть хорошо, если o
не равно нулю, и вы думаете, что метод ToString
может делать то, что вы хотите.
Не совсем дубликат, но есть также некоторые дискуссии о производительности в [предыдущий вопрос] (HTTP: // stackoverflow.com/questions/2483/casting-newtype-vs-object-as-newtype). – Unsliced 2008-09-25 10:23:31
4th: `string s = Convert.ToString (o)`; 5th: `string s = $" {o} "` (или эквивалентно форма `string.Format` для более раннего C#) – 2016-02-07 21:48:56