Основной ответ на ваш вопрос: да, вы должны перебирать значения, чтобы найти измененные.
Теперь остальная часть этого ответа будет читаться как обзор кода. Так много предупреждающих колоколов ушло в мою голову, когда я прочитал ваш код, который я счел вынужденным сделать.
1) Прежде всего, ваш код будет работать даже на работу. Это потому, что вы обрабатываете ключи в Dictionary
как индексы в List
или Array
. Ваш цикл for
начинает i
в 0 и увеличивает его до Count
(это номер KeyValuePair
s кстати). Но что, если у меня нет значения в Dictionary
с ключом, равным 0? В общем, вы получите исключение что-то вроде этого:
RecA_Dic myD = new RecA_Dic();
myD.Add(10,new Rec_A());
myD.getModifiedItems(); //throws KeyNotFoundException
Теперь, если вы добавляете значения в Dictionary
с индексом нулевой основе, то, что возникает вопрос о том, почему использовать Dictionary
когда List
будет делать?
2) Вам не нужно делать отливки на this[i]
. Поскольку вы сказали Dictionary
, что он будет содержать значения Rec_A
, он вернет значения как Rec_A
. Это красота дженериков.
3) Вам не нужно сравнивать modified
с true
в заявлении if
.При работе с bool
переменными обычно считается хороший этикет, чтобы не сравнивать их с true
или false
. На боковой ноте вы можете рассмотреть возможность переименования modified
в IsModified
. Это лучше согласуется со многими стандартными соглашениями об именах и делает код более удобочитаемым.
4) По возможности попытайтесь использовать foreach
вместо for
. В этом случае foreach
бы на самом деле решить эту проблему, я уже упоминал в 1.
5) Как Умберто упоминался вы можете рассмотреть вопрос о возвращении IEnumerable
и используя yield return
. Это дает вам преимущество отсроченного исполнения.
6) И наконец, почему вы унаследовали от Dictionary
? Основываясь на вашем коде, я бы предположил, что вы могли бы просто создать Dictionary
и сделать свой getModified
метод static
и сделать его в качестве параметра Dictionary
(или , если это все, что вам действительно нужно).
Я надеюсь, что некоторые из моих предложений помогут вам.
Словарь <> не имеет индексатора [int], если его тип ключа не является int. – Humberto
... и в этом случае, [int] не делает, что вы думаете! – n8wrl
@Humberto: тип ключа * есть * int в примере. – Randolpho