Как к бомбе замедленного действия приложение Android?

У нас был некоторый код здесь (в VS2005 и C#2.0), где предыдущие инженеры старались изо всех сил использовать list.ForEach( delegate(item) { foo;}); вместо foreach(item in list) {foo; }; для всего кода, который они записали. например, блок кода для чтения строк от dataReader.

я все еще не знаю точно, почему они сделали это.

недостатки list.ForEach():

  • Это является более подробным в C# 2.0. Однако в C# 3 вперед, можно использовать" =>" синтаксис для создания некоторых приятно кратких выражений.

  • Это менее знакомо. Люди, которые должны поддержать этот код, зададутся вопросом, почему Вы сделали это тот путь. Это взяло меня некоторое время, чтобы решить, что не было никакой причины, кроме, возможно, чтобы заставить писателя казаться умным (качество остальной части кода подорвало это). Это было также менее читаемо, с" })" в конце блока кода делегата.

  • См. также книгу Bill Wagner "Эффективный C#: 50 Особенных методов Улучшить Ваш C#", где он говорит о том, почему foreach предпочтен другим циклам как для или циклы с условием продолжения - основной момент, состоят в том, что Вы позволяете компилятору решить лучший способ создать цикл. Если будущей версии компилятора удастся использовать более быструю технику, то Вы получите это бесплатно при помощи foreach и восстановления, вместо того, чтобы изменить Ваш код.

  • foreach(item in list) конструкция позволяет Вам использовать break или continue, если необходимо выйти из повторения или цикла. Но Вы не можете изменить список в цикле foreach.

я удивлен видеть, что list.ForEach немного быстрее. Но это - вероятно, не допустимая причина использовать его повсюду, который был бы преждевременной оптимизацией. Если Ваше приложение использует базу данных или веб-сервис, который, не управление циклом, почти всегда будет, то, куда время проходит. И Вы сравнили его с for цикл также? Эти list.ForEach мог произойти быстрее из-за использования этого внутренне и for, цикл без обертки будет еще быстрее.

я не соглашаюсь, что list.ForEach(delegate) версия "более функциональна" любым значительным способом. Это действительно передает функцию функции, но нет никакой большой разницы в организации программы или результате.

я не думаю, что foreach(item in list), "говорит точно, как Вы хотите сделанный" - for(int 1 = 0; i < count; i++), цикл делает это, foreach, цикл оставляет выбор управления до компилятора.

Мое чувство, на новом проекте, для использования foreach(item in list) для большинства циклов для соблюдения общего использования и для удобочитаемости и использования list.Foreach() только для коротких блоков, когда можно сделать что-то более изящно или сжато с 3 дюймами C# =>" оператор. В случаях как этот может уже быть дополнительный метод LINQ, который более конкретен, чем [1 119]. Посмотрите, не делает ли Where(), Select(), Any(), All(), Max() или один из многих других методов LINQ уже то, что Вы хотите от цикла.

10
задан Tim B 4 December 2015 в 17:00
поделиться

2 ответа

. Я бы предложил использовать класс Calendar и чтобы ваше приложение сверяло текущую дату с датой истечения срока действия в вашем OnResume (s ).

Код будет выглядеть примерно так:

    protected void onResume()
    {   
        super.onResume();

        Calendar expirationDate = Calendar.getInstance();
        expirationDate.set(2009, 7, 3);  //hardcoded expiration date
        Calendar t = Calendar.getInstance();  //Calendar with current time/date
        if (t.compareTo(expirationDate) == 1)
           finish();
    }
16
ответ дан 3 December 2019 в 20:06
поделиться

Также, в зависимости от вашего приложения, вы можете захотеть, чтобы вызов истечения срока выполнял вызов веб-сервера, таким образом, если вы хотите продлить или изменить дату, она будет динамической и не будет привести к преждевременному истечению срока действия приложений. Только мои 2 цента.

3
ответ дан 3 December 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: