Оба примера будут успешными или неуспешными в одинаковых обстоятельствах, и когда они будут успешными, поведение будет идентичным.
Когда они терпят неудачу, результат будет немного отличаться: второй пример терпит неудачу немного раньше (при приведении) и с более конкретным исключением (InvalidCastException
против NullReferenceException
).
Основным преимуществом является отладка: когда они терпят неудачу, у вас есть больше информации о том, почему это не удалось во втором примере, чем в первом. В частности, если PropertyIdentifier равен null
вместо non-string
, вы можете указать это во втором случае, но не в первом.
Кроме того, если вы находитесь в try/catch
, вы можете обрабатывать случай, отличный от string
, в отдельном пути кода, чем случай null
. Однако вам, вероятно, не следует кодировать таким образом: если вы это делаете, вы делаете что-то еще неправильно.
Это может помочь осветить ситуацию, если вы выполните следующий код в различных случаях:
var propertyI = lstProperty[i];
var propertyIdentifier = propertyI.PropertyIdentifier;
// pick one of these:
var propertyIdentifierAsString = propertyIdentifier as string;
var propertyIdentifierAsString = (string)propertyIdentifier;
if (propertyIdentifierAsString.CompareTo("Name") == 0)