Qual è una possibile giustificazione per non includere lunghi elenchi di argomenti? (StyleCop SA1115)

StackOverflow https://stackoverflow.com/questions/352821

  •  20-08-2019
  •  | 
  •  

Domanda

Sono bloccato in una battaglia tra ReSharper e StyleCop e vorrei far vincere ReSharper, ma voglio ascoltare gli argomenti a favore di StyleCop prima di farlo.

Quando scrivo lunghi elenchi di argomenti, ReSharper taglia sensibilmente l'elenco dei parametri e lo riavvia sulla riga successiva. Lo trovo molto più leggibile.

Quando eseguo StyleCop sul codice, mi vuole lasciare quelle righe molto a lungo. Non mi piace, quindi voglio ignorare quella regola StyleCop (SA1115). Non riesco a pensare a una buona ragione per cui SC vorrebbe quelle lunghe file in primo luogo & # 8211; è solo un caso di " lo abbiamo sempre fatto in questo modo! " ;?

È stato utile?

Soluzione

Probabilmente è lì per ricordarti che la tua lista di argomenti è troppo lunga e dovrebbe essere abbreviata.

Altri suggerimenti

StyleCop non vuole che tu metta tutti i tuoi parametri su una linea davvero lunga. Tuttavia, non vuole nemmeno che tu inserisca arbitrariamente una nuova riga per spostare parte dell'elenco dei parametri sulla riga successiva. StyleCop desidera che tu esegua una delle seguenti operazioni:

public void MyMethod(int param1, int param2, int param3)

public void MyMethod(
    int param1, int param2, int param3)

public void MyMethod(
    int param1,
    int param2,
    int param3)

Mentre si gioca con il codice da questo domanda , ho anche commesso un fallo su SA1115 eseguendo StyleCop dal VS IDE. Dopo un po 'di confusione, ecco il risultato finale che StyleCop ha ritenuto OK:

public static string Format<T>(string pattern, T template)
{
    Dictionary<string, string> cache = new Dictionary<string, string>();

    return RegexExpression.Replace(
        pattern, 
        match =>
    {
        string key = match.Groups[1].Value;
        string value;

        if (!cache.TryGetValue(key, out value))
        {
            var prop = typeof(T).GetProperty(key);

            if (prop == null)
            {
                throw new ArgumentException("Not found: " + key, "pattern");
            }

            value = Convert.ToString(prop.GetValue(template, null));
            cache.Add(key, value);
        }

        return value;
    });
}

Ho pensato di condividerlo.

Sembra che la regola tecnicamente dice " il parametro deve seguire la virgola. " Abbastanza schizzinoso se me lo chiedi, ma alcune persone credono nell'avvio di linee di continuazione con le virgole per mostrare davvero ehi! Questa linea è una continuazione! Ad esempio

void Foo(  int blah
         , string blork
         , ...

Qualunque cosa galleggi la tua barca, personalmente :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top