ToList () vs Utilizzo del costruttore elenco predefinito

3

Dopo aver letto le regole di Clean Code, uno di questi è usare il costruttore predefinito quando si usano i trasferimenti di dati da una collezione ad un'altra.

Ad esempio ho:

Dictionary<string, string> dict = new Dictionary<string,string>();

Quindi cosa è meglio per le prestazioni? So che LINQ non è efficace, ma è sempre un modo migliore di utilizzare il costruttore predefinito (per questa specifica situazione).

1. List<string> list = new List(dict.Keys);

o

2. List<string> list = dict.Keys.ToList();
    
posta NSKBpro 03.07.2018 - 09:46
fonte

1 risposta

8

After reading rules of Clean Code, one of them is to use default constructor when using transferring data from one collection to other

Un costruttore predefinito è uno che non ha parametri o dove tutti i parametri hanno valori predefiniti. Quindi:

var dict = new Dictionary<string,string>();

sta usando un costruttore predefinito. È altamente improbabile che qualsiasi consiglio sul codice pulito suggerisca di utilizzare tali costruttori per copiare le raccolte da una forma all'altra.

I know that LINQ is not effective

Davvero? Ancora una volta penso che tu stia usando la parola sbagliata visto che linq è incredibilmente efficace. Non è sempre l'approccio più veloce, quindi forse intendi "LINQ non è sempre il più veloce"?

So what is best for performance?

Solo tu puoi determinare ciò per la tua particolare applicazione. Quindi prenditi qualcosa come BenchmarkDotNet e confronta i due approcci.

Per quanto un indizio, hanno un'occhiata al codice sorgente e vedrai che:

var list = dict.Keys.ToList();

chiama il seguente codice:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw Error.ArgumentNull(nameof(source));
    }

    return source is IIListProvider<TSource> listProvider 
        ? listProvider.ToList() 
        : new List<TSource>(source);
}

(codice leggermente riformattato per adattarsi meglio qui) cioè, chiama semplicemente new List<TSource>(source) . Quindi affermare che linq è lento è un classico caso di ripetere ingenuamente un'eccessiva semplificazione piuttosto che prendersi il tempo per verificarne la validità.

    
risposta data 03.07.2018 - 11:25
fonte

Leggi altre domande sui tag