В C# используйте as
ключевое слово для кастинга.
string a = (string)obj
выдаст исключение, если obj не будет строкой
string a = obj as string
, то уедет как пустой указатель, если obj не будет строкой
, все еще необходимо принять пустой указатель во внимание, но это является обычно более прямым затем ищущее исключения броска. Иногда Вы хотите "бросок или аварийное завершение" поведение типа, в этом случае (string)obj
, синтаксис предпочтен.
В моем собственном коде, я нахожу, что использую as
синтаксис приблизительно 75% времени, и (cast)
синтаксис приблизительно 25%.
Есть несколько способов сделать это; Я использую Assert.Throws.
var exception = Assert.Throws<YourTypeOfException>(()=> Action goes here);
например
var exception = Assert
.Throws<ArgumentNullException>(()=> new ChimpPuncher(null));
Затем вы можете запросить объект исключения, если хотите, например
Assert.That(exception.Message, Text.Contains("paramname");
Почему вы не можете заключить фиктивный вызов метода в блок try / catch и перехватить выбрасываемое конкретное исключение?