Si el "tirar" declaración en cuestión es verdaderamente inalcanzable en cualquier escenario posible, entonces debería ser suprimen y se sustituye por:
Debug.Fail("This should be unreachable; please find and fix the bug that caused this to be reached.");
Si el código es accesible a continuación, escribir una prueba unitaria que prueba ese escenario. Los escenarios de informe de errores para los métodos de acceso público son escenarios perfectamente válidos. Tienes que manejar todas las entradas correctamente, incluso las malas entradas. Si lo correcto es lanzar una excepción, pruebe que está lanzando una excepción.
ACTUALIZACIÓN: de acuerdo con los comentarios, de hecho es imposible que se produzca el error y, por lo tanto, no se puede acceder al código. Pero ahora tampoco se puede acceder a Debug.Fail, y no se compila porque el compilador señala que un método que devuelve un valor tiene un punto final alcanzable.
El primer problema no debería ser realmente un problema; seguramente la herramienta de cobertura de código debería ser configurable para ignorar el código de depuración solo accesible. Pero tanto problema puede ser resuelto mediante la reescritura del bucle:
public int FirstInvalidDigitPosition
{
get
{
int index = 0;
while(true)
{
Debug.Assert(index < this.positions.Length, "Attempt to get invalid digit position but there are no invalid digits!");
if (!this.positions[index].Valid) return index;
index++;
}
}
}
Un enfoque alternativo sería la de reorganizar el código de modo que usted no tiene el problema en el primer lugar:
public int? FirstInvalidDigitPosition {
get {
for (int index = 0; index < this.positions.Count; ++index) {
if (!this.positions[index].Valid) return index;
}
return null;
}
}
y ahora no necesita restringir las llamadas para llamar a AreThereInvalidDigits primero; solo legalice llamar a este método en cualquier momento. Eso parece ser lo más seguro que hacer. Los métodos que explotan cuando no se hace una comprobación costosa para verificar que sean seguros para llamar son métodos frágiles y peligrosos.
El mero hecho de que diga que no debe ejecutarse y no puede ser alcanzado me dice "Quítelo". Ha validado la cadena como no válida para llegar aquí, para que sepa que la propiedad devolverá algo. – Michael