Ответ 1
as
не работает с не-nullable struct
s:
object o = 123;
int i = o as int; // compile error
Однако:
object o = 123;
if(o is int) {
int i = (int)o;
//...
}
конечно, начиная с версии 2.0, вы также можете использовать:
int? i = o as int?;
и проверьте null
как обычно.
Существует также сценарий, что вам не нужны значения объекта... вам просто нужно знать, что это такое:
if(obj is Something)
throw new InvalidOperationException("Seriously, don't do that");
// phew! dodged a bullet; we're ok here...
Обратите внимание, что GetType()
не подходит для этого, так как вы не хотите рассматривать подклассы, интерфейсы и т.д. вручную.