По умолчанию dict в python не может иметь дубликат ключа, с другой стороны, мы можем иметь несколько значений. В первом утверждении python добавит ключ aa
со значением:
[('a', 'b'), ('c', 'd')]
, затем перезапишет его значение с помощью:
[('e', 'f'), ('g', 'h')]
Чтобы создать dict с дублирующимися ключами, взгляните на этот make-словарь с дублирующимися ключами в python
int percent = 0
if (max != 0) percent = (100*position) / max
int percent = ( max > 0 ) ? (100 * position) / max : 0;
Зависит от того, что Вы хотите.
Ну, если макс. нуль, то нет никакого прогресса, который будет сделан. Попытайтесь ловить исключение, где это называют. Это - вероятно, место, чтобы решить, существует ли проблема или если индикатор выполнения должен быть установлен в нуле или в 100%.
Это не проблема C#, это - математическая проблема. Деление на нуль не определено. Имейте, если оператор, который проверяет, выполняют ли макс.> 0 и только Ваше подразделение затем.
Ну, это полностью зависит от поведения, которое Вы хотите. Если максимальное значение Вашей панели программы является нулем, действительно ли это полно? Действительно ли это пусто? Это - проектное решение, и когда Вы выбрали, просто тестируете на макс. == 0 и развертываете свой ответ.
Проверьте на нуль.
if ( max == 0 ) {
txt = "0%";
} else {
// Do the other stuff....
Преобразуйте Ваш
int percent = (100 * position) / max;
в
int percent;
if (max != 0)
percent = (100 * position) / max;
else
percent = 100; // or whatever fits your needs
Я предполагаю, что основной вопрос: имеет смысл даже вызывать эту функцию, где макс. '0'? Если да, то я добавил бы специальную обработку к нему т.е.:
if (max == 0)
{
//do special handling here
}
else
{
//do normal code here
}
Если бы 0 не имеет смысла, я занялся бы расследованиями, куда он прибывает из.
Вам был бы нужен защитный пункт, который проверяет на макс. == 0.
private void SetProgressBar(string text, int position, int max)
{
if(max == 0)
return;
int percent = (100 * position) / max; //when max is 0 bug hits
string txt = text + String.Format(". {0}%", percent);
SetStatus(txt);
}
Вы могли также обработать Деление Нулевым исключением, поскольку Ваш образец показал, но это является обычно более дорогостоящим для обрабатывания исключений затем для установки проверок на известный, плохо оценивает.
При использовании этого для загрузки Вы, вероятно, захотите показать 0%, как я предполагаю, макс. был бы == 0 в этом случае, когда Вы еще не ЗНАЕТЕ размера файла.
int percent = 0;
if (max != 0)
...;
Если бы Вы используете это для некоторой другой долгой задачи, я хотел бы принять 100%
Но также и, так как положение никогда не может быть между 0 и-1, таким образом, Вы, вероятно, захотите отбросить 100 *