Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

518
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!