Это действительно зависит от того, знаете ли Вы, ли 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. Они имеют тенденцию быть более распространенными и партия тяжелее для разыскивания, как только они происходят в дикой природе, поскольку почти каждая строка разыменовывает переменную и может бросить ту. С другой стороны, при попытке бросить к типу значения (любой примитив, или структуры такой как [1 116] DateTime), необходимо использовать прямой бросок - эти as
, не будет работать.
В особом случае преобразования в строку, каждый объект имеет ToString
, таким образом, Ваш третий метод может быть хорошо, если o
не является пустым, и Вы думаете ToString
, метод мог бы сделать то, что Вы хотите.
На веб-сайте IBM Developerworks есть хорошая серия по этому поводу, но самый информативный источник, который я нашел, - это эта презентация Брайана Гетца, которая стоит час вашего времени. Первые 25 минут он тратит на разговоры о предыстории, а затем представляет несколько отличных примеров новой структуры.
Брайан Гетц выступил с отличным докладом на Devoxx 08, вызванном из параллельного в параллельный, на платформе fork join и абстракции Parallel Array поверх нее. Вы можете просмотреть видео выступления и слайды на сайте Parleys