Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

522
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda