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

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

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 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!