Λοιπόν, μπορείτε να ζητήσετε από το LINQ να κάνει το looping για εσάς:
List<int> x = Enumerable.Repeat(value, count).ToList();
Δεν είναι σαφές εάν με τον όρο "προεπιλεγμένη τιμή" εννοείτε το 0 ή μια προσαρμοσμένη προεπιλεγμένη τιμή.
Μπορείτε να το κάνετε λίγο πιο αποτελεσματικό (στο χρόνο εκτέλεσης, είναι χειρότερο στη μνήμη) δημιουργώντας έναν πίνακα:
List<int> x = new List<int>(new int[count]);
Αυτό θα κάνει ένα μπλοκ αντίγραφο από τον πίνακα στη λίστα, το οποίο πιθανότατα θα είναι πιο αποτελεσματικό από το looping που απαιτείται από το ToList
.
int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();
εάν έχετε μια λίστα σταθερού μήκους και θέλετε όλα τα στοιχεία να έχουν την προεπιλεγμένη τιμή, τότε ίσως πρέπει απλώς να χρησιμοποιήσετε έναν πίνακα:
int[] x = new int[10];
Εναλλακτικά, αυτό μπορεί να είναι ένα καλό μέρος για μια προσαρμοσμένη μέθοδο επέκτασης:
public static void Fill<T>(this ICollection<T> lst, int num)
{
Fill(lst, default(T), num);
}
public static void Fill<T>(this ICollection<T> lst, T val, int num)
{
lst.Clear();
for(int i = 0; i < num; i++)
lst.Add(val);
}
και στη συνέχεια μπορείτε ακόμη και να προσθέσετε μια ειδική υπερφόρτωση για την κλάση List για να γεμίσει μέχρι τη χωρητικότητα:
public static void Fill<T>(this List<T> lst, T val)
{
Fill(lst, val, lst.Capacity);
}
public static void Fill<T>(this List<T> lst)
{
Fill(lst, default(T), lst.Capacity);
}
Τότε μπορείτε απλώς να πείτε:
List<int> x = new List(10).Fill();