//always works, returning a valid object into _page
_page = _httpContext.Handler as System.Web.UI.Page;
//Fails throwing the exception : Unable to cast object of type 'System.Web.DefaultHttpHandler' to type 'System.Web.UI.Page'
_page = (System.Web.UI.Page)_httpContext.Handler;
Me gustaría saber por qué sucede esto?¿Por qué funciona la palabra clave 'como' mientras que el molde() no
EDIT:
//Fixes the problem
if(_httpContext.Handler is System.Web.UI.Page)
_page = (System.Web.UI.Page)_httpContext.Handler;
Si i depurar el 'como' declaración de palabras clave, nunca consigo una referencia nula (objeto siempre asignado correctamente). Sin embargo, el molde() crea excepciones a menos que tenga la condición if.
EDITAR: Después de aproximadamente 15 carreras a través de la clase, pude obtener un nulo. Parece que se necesitaron más carreras para encontrar un valor nulo en comparación con la rapidez con la que el reparto() captaría una excepción.
ANTIGUO: Cuando hay una depuración en la instrucción 'como' cada vez que la clase ejecuta los puntos de ruptura, nunca se anula.
Cuando hay una depuración en la instrucción '()' dentro de if, cada vez que el punto de interrupción llega al molde, funciona correctamente. Werid
No estoy convencido. Preferiría hacer Class1 foo = (Class1) bar y obtener la excepción de conversión que obtener una excepción nula no útil más tarde con foo.Property o foo.Method(). Esa excepción nula podría ocurrir en cualquier lugar fuera del alcance de su "como". Si espero que el código algunas veces falle, usaré "como" y verificará nulo. –
Ese es el patrón general. Convierte con 'como', y luego busca nulo. – Tejs