Utilizzo condizionale C# e parametro predefinito

Utilizzo condizionale C# e parametro predefinito

Un approccio semplice sarebbe quello di ricorrere solo se parameter è nullo:

string Foo(Resource parameter = null)
{
    if (parameter == null)
    {
        using (var res = new Resource())
        {
            return Foo(res);   
        }
    }
    else 
    {
        parameter.Something();
        ...
        return ...;
    }
}

Farai ricorso solo una volta, quindi non devi preoccuparti di stack illimitati, ecc.


Andrei con 2 metodi separati. Quello conterrà tutta la logica:sarà chiaro e facile da mantenere.

string Foo(Resource parameter)
{
     parameter.Something();
     /...../
     return /...../;
}

string Foo()
{
     using (var res = new Resource)
     {
         return Foo(res);
     }
}

Questo caso è utile anche se si desidera utilizzare il parametro iniettato solo a scopo di test. La ricerca dell'utilizzo del metodo senza parametri porterà all'implementazione effettiva, l'altro ti porterà direttamente ai casi di test.


Andrei per una funzione locale:

string Foo(Resource parameter = null)
{
    if (parameter != null)
    {
        return DoSomething(parameter);
    }

    using (var resource = new Resource())
    {
        return DoSomething(resource);
    }

    string DoSomething(Resource res)
    {
        res.Something();
        /...../
        return /...../
    }
}

(In C# 8, puoi renderlo un static funzione locale).

Se parameter può essere solo null quando non è fornito (cioè qualcuno non chiamerebbe mai Foo(null) ), quindi puoi utilizzare il buon vecchio metodo di overloading:

string Foo(Resource resource)
{
    resource.Something();
    /...../
    return /...../
}

string Foo()
{
    using (var res = new Resource())
    {
        return Foo(res);
    }
}