IEnumerable<T>
нужен тогда и только тогда, когда нужны асинхроннные или ленивые вычисления, по тому что метод возвращающий IEnumerable<T>
, имеет право возвращать не весь набор, а возвращать экземпляры T
поштучно, вот такyield return
(T)foo;почему то значения в r1 r2 другие, хоть и приближенные
Random.Range(numbers[0], numbers[2]);
numbers[0]
, ни numbers[2]
. вы же задаете их как границы диапазона будущего случайного значения. обычно вы получите действительно значение где то между границnumbers.Remove(r1);
скорее всего ни чего не удаляет из списка. для удаления надо укзать значение, которое там действительно существуета r3 всегда равен min
numbers = new List<float>() { min, mid, max };
...
r3 = numbers[0];
numbers = new List<float>() { min, mid, max };
// тут без изменений
// далее различаем индексы и сами значения
i1 = Random.Range(0, numbers.Count-1);
r1 = numbers[i1]
numbers.RemoveAt(i1);
// ну или как вариант
i_n = Random.Range(0, numbers.Count-1);
r_n = numbers[i_n]
numbers.Remove(r_n);
// как видите, ни одной строки не убавилось. а удаление по индексу точно быстрее
// полную совместимость с Unity это уж сами проверьте
// естественно n ни когда не должно превышать исходного размера списка
// и еще - средства раскраски синтаксиса напомнили in это зарезервированное
// ключевое слово ;))
Random.Range()
возвращает float
, а в качестве индекса должно использоваться int
. в традиционном дотнете, приведение местами пойдет автоматически, но где то придется использовать явные приемы приведения типов...i_n = Random.Range(0, numbers.Count);
numbers.Count
всегда вернет актуальное значение размера. его нельзя использовать в качесве индекса. но нас только что заверили, что рандомайзер не возвращает верхнюю грницу. значит такой код и короче и корректнее Ссылки от того куда положили возвращаем в виде коллекции тому кто нас вызвал.вот это место не очень вписывается в концепцию конвеера на IEnumerable/yield/async/await
Пробовал с BlockingCollectionповторюсь, на сколько я уловил вашу задачу, кроме IEnumerable<>, в подобном конвеере в принципе ни че больше не нужно. ну или разве что как вы там результат решите формировать. но и для результата, даже для накопителя, из дотнетовских конструкций, того же IEnumerable<> за уши, а из него, если кончно это требуется, можно и json формировать
большего понимания языканужна практика. про книги - тот кто хочет узнать нечто, читает все что под руку попадется*. тот кто не хочет ни читать, ни кодить, (upd даже гуглить сам не хочет ;) тот и задает вопросы "а как мне ни чего не делая, сразу в сеньеры попасть"?
public static string b64toASCII(this string s) => Encoding.ASCII.GetString(Convert.FromBase64String(s));
LocalData + "Тут".b64toASCII(),
LocalData + "Все ".b64toASCII(),
LocalData + "значения".b64toASCII(),
LocalData + "будут".b64toASCII(),
LocalData + "совершенные".b64toASCII(),
LocalData + "Разные".b64toASCII(),
base64
явно не нужен для литералов набранных в редакторе. они вообще не требуют дополнительной обработки. это похоже на данные получаемые из сети к примеру. если разделение запятой не ошибка, значит формируется массив. и если LocalData
постоянное значение для массива, можно еще и LINQ притянуть// сначала собираем base64 данные в массив. с большой вероятностью такой код будет проще
// пока в нем нет обработок.
// допустим этот массив называется b64data. тогда итоговый массив можно получить одной строкой
var target = b64data.Select(x => (LocalData + x.b64toASCII())).ToArray();
// ToArray() можно заменить на ToList() при желании,
// но если и дальше использовать LINQ, проще так и шпарить IEnumerable<string>
// в смысле убрать .ToArray() вообще
COM->System.Windows.Formsэто не COM
.net Core, Visual Studio 2019, создаю проект в консоли(так ведь можно)можно, но только когда вы знаете что делать дальше. а сейчас очевидно что не знаете: