.Net 4.5 вводит новые атрибуты информации о вызывающем абоненте.
private void OnPropertyChanged([CallerMemberName]string caller = null) {
// make sure only to call this if the value actually changes
var handler = PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs(caller));
}
}
Это, вероятно, хорошая идея для добавления компаратора к функции.
EqualityComparer.Default.Equals
Здесь приведены примеры здесь и здесь
Также см. Информация о вызывающем абоненте (C # и Visual Basic)
Единственное решение (без полного переосмысления всего вашего проекта - который FWIW мог бы рассмотреть, см. Мои комментарии по вашему вопросу) - это иметь список имен атрибутов (в том порядке, в котором вы хотите, чтобы они были в окончательном списке). ) и используйте getattr
class MonstruousGodClass(object):
_fields_list = ["name", "title", "value", ] #etc...
def as_list(self):
return [getattr(self, fieldname) for fieldname in self._fields_list]
Теперь, поскольку, как я упомянул в комментарии, list
НЕ является правильным типом данных (по крайней мере, из семантического POV), вы можете использовать dict
вместо этого - что делает код намного проще:
import copy
def as_dict(self):
# we return a deepcopy to avoid unexpected side-effects
return copy.deepcopy(self.__dict__)