c# - Deshabilitar las advertencias de resharper que dependen del tipo de compilación
resharper-5.1 (2)
Estoy usando la comprobación de tipos de cinturones y tirantes para posibles problemas de objetos nulos. Sin embargo, Resharper no está jugando muy bien. En una versión de depuración, marca la comprobación if (button != null)
como siempre verdadera y coloca un marcador de advertencia en la barra lateral. En una versión de lanzamiento, sombrea el Debug.Assert
como código nunca utilizado, aunque al menos es lo suficientemente inteligente como para no saturar la barra lateral esta vez.
No quiero deshabilitar la advertencia de verdadero / falso resharper de forma global porque puede indicar un problema en el código. Al mismo tiempo, tener que desordenar mi código con ReSharper disable/restore ConditionIsAlwaysTrueOrFalse
comentarios de ReSharper disable/restore ConditionIsAlwaysTrueOrFalse
cada vez que hago una verificación es feo.
¿Hay alguna opción en ReSharper 5.1 para deshabilitar el comportamiento contingente del tipo de compilación de modo que el if no esté marcado en las compilaciones de depuración, sin evitar que se muestre la advertencia si un Assert
no está presente?
//This should always work unless the columns are fiddled with.
LinkButton button = e.Row.Cells[5].FindControl( "linkButtonName" ) as LinkButton;
//if this isn''t the case in a debug build have VS throw an error in the devs face
Debug.Assert(button != null);
//Don''t let anything go boom in production if an error isn''t caught in dev
if (button != null)
button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
No estoy seguro de estar de acuerdo con el diseño, pero dado lo que desea lograr, intente lo siguiente.
- Instale los contratos de código desde http://research.microsoft.com/en-us/projects/contracts/
- Vuelva a escribir su Debug.Asserts to Contract.Assert
- Luego, cambie las propiedades de su proyecto para que solo verifique los contratos en la compilación de depuración.
Entonces, parece que su problema se resuelve más fácilmente reemplazando debug.assert con lo siguiente:
//Throw an error only if there is a problem with
Contract.Assert(button!=null);
Sin embargo, probablemente cambiaría el diseño para hacer que el trabajo que se realiza con el botón de enlace sea un método para lo siguiente, asumiendo que es posible que haya otras cosas en el botón de enlace.
Entonces tu código de arriba sería:
public void MyMethod(EventArgs e)
{
var button = e.Row.Cells[5].FindControl("linkButtonName") as LinkButton;
SetButtonVisibility(button);
}
public void SetButtonVisibility(LinkButton button)
{
//The button is never null so its a contract
Contract.Requires<ArgumentNullException>(button != null);
button.Visible = (schedule.CreatedBy == Authentification.GetLoggedInUser());
}
Espero que ayude.
Puedes intentar usar Debug.Fail()
lugar:
if (button != null)
button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
else
Debug.Fail("Button was not found");