Estou tentando validar vários parâmetros de configuração, idealmente relatando todos os problemas em uma única passagem. Isso assume um formato semelhante a:
var isValid = true;
if (arg1 == null)
{
// logger.LogError...
isValid = false;
}
if (arg2 == null)
{
// logger.LogError...
isValid = false;
}
if (!isValid)
{
return;
}
arg1.DoSomething(); // possible null warning
Agora, se eu abortar individualmente quando um único argumento for nulo, não há problema: a análise nula detecta com sucesso que isso foi verificado e não precisa avisar. Infelizmente, isso significa que não posso relatar vários erros de uma vez, e o usuário precisará fazer vários ciclos de edição-execução para resolver todos os problemas.
Alternativamente, posso ignorar forçosamente avisos nulos com o operador null-forgiving ( !
). Mas isso me deixa vulnerável a realmente esquecer uma verificação nula ou remover uma acidentalmente mais tarde.
Posso ter meu bolo e comê-lo também? Existe um padrão mais organizado para fazer validação de múltiplos argumentos sem sacrificar a análise de nulidade?
Exemplo completo:
using System;
#nullable enable
public class Program
{
public static void Main()
{
Warning();
NoWarning();
}
public static void Warning()
{
string? canBeNull = Random.Shared.Next(2) == 1 ? "not-null" : null;
string? canBeNull2 = Random.Shared.Next(2) == 1 ? "not-null" : null;
var isValid = true;
if (canBeNull == null)
isValid = false;
if (canBeNull2 == null)
isValid = false;
if (!isValid)
return;
Console.WriteLine(canBeNull.Length);
}
public static void NoWarning()
{
string? canBeNull = Random.Shared.Next(2) == 1 ? "not-null" : null;
string? canBeNull2 = Random.Shared.Next(2) == 1 ? "not-null" : null;
if (canBeNull == null)
return;
if (canBeNull2 == null)
return;
Console.WriteLine(canBeNull.Length);
}
}