1. C# / Говнокод #20239

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    public override TItem[] ToArray()
    {
    	TItem[] arr = new TItem[Count];
    	Int64 i = 0;
    	foreach (TItem item in this)
    	{
    		if (i >= Count) break;
    		arr[i] = item;
    		i++;
    	}
    	return arr;
    }

    И пофиг, что foreach и так не даст превысить размер коллекции, всё равно проверим!

    Запостил: dm_fomenok, 20 Июня 2016

    Комментарии (13) RSS

    • А вдруг другой поток добавит элементы в коллекцию, пока мы её обходим?
      Ответить
      • Надо тогда Interlocked.Add(i, 1) делать
        исключение на .MoveNext()
        Ответить
      • И необязательно другой - может автор привык внутри таких циклов удалять элементы, вот и проверяет.
        Ответить
        • Если в foreach изменить коллекцию, будет исключение
          Ответить
          • Исключение же бросать надо - а вдруг оно закатится куда-нибудь и потеряется?!
            Ответить
            • пх, тоже мне - проблема. Делаешь исключение квадратным и оно уже никуда не закатится.
              Ответить
              • Зато провалится в квадратное отверстие. Дилема.
                Ответить
                • Вот для чего, оказывается, изобрели треугольник Рело: он и катится плохо, и в отверстие своей формы не проваливается.
                  Ответить
              • >>. Делаешь исключение квадратным
                Такое не провалится точно:
                [NSException raise];
                Ответить
      • а что, конкарент модификейшен эксепшен не будет?
        Ответить
    • Маразм крепчает)))
      Ответить

    Добавить комментарий