Это действительно зависит от того, знаете ли вы 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метод может делать то, что вы хотите.