Aquí es una pieza de código:ReSharper: cómo quitar "posible" System.NullReferenceException" advertencia
IUser user = managerUser.GetUserById(UserId);
if (user==null)
throw new Exception(...);
Quote quote = new Quote(user.FullName, user.Email);
Todo está bien aquí. Pero si reemplazo "si" de acuerdo con la siguiente:
ComponentException<MyUserManagerException>.FailIfTrue(user == null, "Can't find user with Id=" + UserId);
donde implementación de la función es el siguiente:
public abstract class ComponentException<T> : ComponentException
where T : ComponentException, new()
{
public static void FailIfTrue(bool expression, string message)
{
if (expression)
{
T t = new T();
t.SetErrorMessage(message);
throw t;
}
}
...
}
Entonces ReSharper me genera una advertencia: Posible 'System.NullReferenceException' que señala en la primera utilización del objeto 'usuario'.
Q1. ¿Por qué genera tal excepción? Por lo que veo si 'user == null' se generará una excepción y la ejecución nunca llegará al punto de uso.
Q2. ¿Cómo eliminar esa advertencia? Tenga en cuenta: 1. No quiero suprimir esta advertencia con comentarios (tendré muchas piezas similares y no quiero transformar mi código fuente en 'garbas comentó); 2. No quiero cambiar la configuración de la nueva configuración para cambiar este problema de advertencia a 'sugerencia' de 'pista'.
Gracias.
¡Cualquier pensamiento es bienvenido!
P.S. Estoy usando el reajuste 5.1, MVSV 2008, C#
deseaba era cierto ... ReSharper 5.1 no identifica correctamente 'Debug.Assert (usuario! = Null);' y eleva la advertencia. ¿Hay alguna configuración que deba hacer? –
Uh, R # 5.1 está bastante desactualizado, así que no tengo nada para poner a prueba su problema. Sin embargo, algunos consejos: asegúrese de que su código se refiera apropiadamente a la clase 'System.Diagnostics.Debug' ya que el contrato del código fue definido para eso, y no para métodos arbitrarios con ese nombre/firma. Además, asegúrese de que la configuración de compilación esté configurada en Depurar (de lo contrario, el código quedará fuera del alcance y, por lo tanto, aparecerá la advertencia). – Lucero
'Debug.Assert' funciona, pero solo en el modo de depuración. –