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

278
Visualizações
Análisis estático anulable de C#: ¿puede usar condiciones posteriores condicionales con múltiples valores de retorno?

Usando C# 8+ con contexto anulable habilitado, tengo un método que devuelve

  1. Una enumeración que representa varios códigos de error o éxito;
  2. Un objeto (si es exitoso) o nulo (si es un error)

como ValueTuple. Además del operador que perdona nulos , ¿hay alguna manera de decirle al compilador que el objeto no es nulo si el valor de enumeración indica éxito?

 private (EnumResult, SomeClass?) DoThing(...) { if (...) return (EnumResult.Error1, null); if (...) return (EnumResult.Error2, null); return (EnumResult.Success, new SomeClass(...)); }
 (EnumResult result, SomeClass? someClass) = DoThing(...); if (result == EnumResult.Success) { // `someClass` should not be null here, but the compiler doesn't know that. }

Soy consciente de que hay atributos de análisis estáticos anulables que se pueden aplicar cuando se usa un retorno bool y un parámetro out :

 private bool TryDoThing(..., [NotNullWhen(true)] out SomeClass? someClass) { if (...) { someClass = null; return false; } someClass = new SomeClass(...); return true; }
 if (TryDoThing(..., out SomeClass someClass)) { // The compiler knows that `someClass` is not null here. }

Pero no pude determinar cómo aplicar algo similar al devolver un ValueTuple.

Estoy usando una enumeración en lugar de un bool o lanzando excepciones porque el código de resultado se comunica a través de una canalización con nombre , donde el proceso en el otro lado lo analiza nuevamente en una enumeración y luego reacciona de acuerdo con el error específico. Estoy usando un ValueTuple en lugar de un parámetro de out por preferencia personal.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No. En este momento, los atributos MaybeNullWhen/NotNullWhen solo funcionan para indicar que el estado nulo de un parámetro de out depende de un valor de retorno bool .

Actualmente no hay ningún plan para permitir que el estado nulo de una variable dependa del valor de un valor de retorno de enumeración, por ejemplo.

Tampoco hay ningún plan para permitir una interdependencia entre los elementos de un valor de retorno de tupla, es decir, el patrón (object? result, bool ok) Method() . Si está interesado en que dicha funcionalidad se agregue al lenguaje, siéntase libre de iniciar una discusión sobre cómo funcionaría en https://github.com/dotnet/csharplang/discussions .

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