Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

519
Vistas
Falso positivo: la condición previa es redundante

¿Por qué recibo la siguiente advertencia para este ejemplo de código trivial tan pronto como el nivel de advertencia está en el segundo nivel o superior?

 public int Foo(int a) { if (a >= 0) throw new ArgumentException("a should be negative", "a"); Contract.EndContractBlock(); return a; }

CodeContracts: requisitos sugeridos: esta condición previa es redundante: considere eliminarla. ¿Estás comparando un valor de estructura con nulo?

Claramente, un número entero puede ser negativo, por lo que la condición previa no es redundante, entonces, ¿por qué recibo esta advertencia?

Editar: esto es lo que muestra ILSpy para la función creada al mirar el exe:

 public int Foo(int a) { if (a >= 0) { ContractHelper.RaiseContractFailedEvent(ContractFailureKind.Precondition, null, "a < 0", null); throw new ArgumentException("a should be negative", "a"); } return a; } 

Configuración de contratos de código

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sé que esto no responde directamente a su pregunta, pero parece que está usando un modo heredado para los contratos de código.

Este documento describe el modo de ensamblaje recomendado en función de los requisitos de uso:

http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf

De las páginas 20, 21...

pautas de uso del modo de ensamblaje

Otro fragmento del documento:

5.1.1 Modo de montaje

Las herramientas de contrato necesitan saber qué modo de uso elige. Si usa VisualStudio, seleccione el modo de ensamblaje en el panel de propiedades del contrato de la siguiente manera:

  • Uso 1 o 2: Requiere contrato estándar
  • Uso 3: Validación de parámetros personalizados

Esto permite que las herramientas emitan advertencias adecuadas cuando viola las pautas de uso. Si usa las herramientas desde la línea de comandos, pase el argumento adecuado para la opción -assemblyMode

Por lo tanto, al usar el modo de ensamblaje "Requiere contrato estándar", podría hacer cualquiera de las siguientes cosas:

 Contract.Requires<ArgumentException>(a < 0, "a"); // OR Contract.Requires(a < 0, "a should be negative");

Ninguno de estos genera ninguna advertencia para mí.

Espero que esto ayude de todos modos.

Saludos peteski

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda