Более короткий способ объявить и инициализировать список<ushort>

В настоящее время я объявляю и инициализирую список следующим образом:

List<ushort> myList = new List<ushort>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

В конечном итоге у меня будет больше ushort списки, которые будут содержать более 10 значений, и, например, неэффективно вводить каждое число от 1 до 100. В списке всегда будет диапазон номеров.

Есть более короткий способ написать это? Я пытался исследовать Enumerable.Range, но это только обрабатывает int значения, и я получаю ошибку "Не удается неявно преобразовать тип int в ushort".

4 ответа

Решение

Как насчет явного приведения?

List<ushort> myList = Enumerable.Range(1, 100).Select(i => (ushort)i).ToList();

и затем сделайте это действительно коротким!

var myList = Enumerable.Range(1, 100).Select(i => (ushort)i).ToList();

Вы можете попробовать использовать цикл, чтобы заполнить ваш список.

List<ushort> myList = new List<ushort>();

И тогда есть это в методе:

ushort count = 100; //or whatever number you need

for (ushort i = 1; i < count + 1; i++)
    myList.Add(i);

Одним из преимуществ циклов, imo, является то, что если в будущем у вас есть список чего-то, например классов, вы можете легко создавать различные экземпляры классов в цикле и добавлять их в список.

List<ushort> values= Enumerable.Range(1, 100).Select(x => (ushort) x).ToList();

ВерсияEnumerable.Rangeиспользование новых общих математических функций .NET 7 может быть:

      public static class EnumerableEx
{
    public static IEnumerable<T> Range<T>(T start, T count)
        where T : INumber<T>
    {
        for (T i = start; i < count; i++)
            yield return i;
    }
}

Используется как

      ushort[] range = EnumerableEx.Range<ushort>(0, 1000).ToArray();
Другие вопросы по тегам