Search
Write a publication
Pull to refresh
6
0
Send message
Страшно представить.
Да вот представьте есть такое в проекте, что идет логирование и проверка значения присваивания, причем один и тот же код повторяется много раз. В класс влезть нельзя.
Я ничего более подходящего не придумал нежели переписать так.
Насчет прокси я тоже думал, но тогда нужно каждое свойство поддержать, а кроме этого в сеттере вам не известно само левое выражение присваивания, а только правое выражение.
Нужно было залогировать все левое выражение (весь путь через точку).
А также неизвестен реальный callermembername.
(Я в примерн просто не стал приводить все параметры set).
Про PostSharp я знаю.

Он вносит изменения в MSIL, а мне бы этого не хотелось.

Кроме этого если доступа к классу нет, то как
«Проатрибутить» свойства?
Кроме этого при логировании, например, мы не узнаем откуда было присвоение.
Ну покажите не «извращенное», по вашему, решение.
Здесь можно в лог записать левый операнд присваивания, например:
Trace.WriteLine(string.Format("{0} < — {1}", property.Body, value));
А вы бы как реализовали?
Дополнение:

При использовании коллекции в WPF, для изменения коллекции асинхронно, не в потоке UI, можно реализовать как предлагается по этой ссылке.

Иначе возникнет ошибка {«this type of collectionview does not support changes to its sourcecollection from a thread different from the dispatcher thread.»}
Указанную статью я знаю. Можно сделать и так, смысла это не меняет. Но там не учтен п.1 из моей статьи
this.CheckReentrancy();
, который все-таки должен быть. Иначе в процессе обработки данных в обработчиках события CollectionChanged, актуальность данных не гарантируется.
То есть возможны (в зависимости от комбинации операций над данными в текущем методе и в обработчиках события CollectionChanged):
— потерянное обновление (lost update)
— «грязное» чтение (dirty read)
— неповторяющееся чтение (non-repeatable read)
— фантомное чтение (fantom read).
Да — так оно и есть, спасибо за уточнение. Внес правку.
А также,
CollectionView
CompositeCollectionView
ListCollectionView
CollectionViewSource
Про бесконечный цикл. Значение переданного параметра IEnumerable может быть реализовано криво, так что получится бесконечный цикл. При использовании ToList он тоже будет бесконечным, но до начала изменения нашей коллекции, а не в момент изменения. Если создание нового объекта раздражает, то можно убрать данную строку.

Спасибо за ссылку.
Чтобы избежать множественного вызова событий:
 PropertyChanged
 PropertyChanged
 OnCollectionChanged

На добавление/удаление каждого элемента у вас вызовется по три события.

Например, если коллекция служит источником для отображения на форме, обновление контрола будет производиться на добавление/удаление каждого элемента, а это не хорошо, если элементов много.
А приведенном мной примере вызовутся три события только в конце обработки всех элементов. То есть обновление контрола произойдет один раз.
И непонятно, зачем Вы делаете «collection.ToList()». Вам не нужен список внутри реализации. Зачем лишнюю память занимать?


Чтобы исключить возможный бесконечный цикл ниже:
foreach (var item in items)


Напишите, пожалуйста, в комментах реализацию SuspendNotification и ResumeNotification.
Да, можно. Только загвоздка в том, что если бы было точное описание, что в том или ином типе такой-то namespace, то это можно было бы сделать заменой. А так как такого описания нет, а возможно даже эти namespace будут указываться в сообщениях сервиса в рандомном порядке, то правка Reference.cs или WSDL не приведет к решению.
Да можно было бы и не править имя параметра «return» на «ArrayOfRegionInfo» в Reference.cs, а заменить его в инспекторе, для однообразия подхода. Но просто я решил заменить в Reference.cs, чтобы показать и этот вариант.
Кроме этого точно нужно заменять в инспекторе поступающее в сообщении имя параметра «gensym-\d+» (\d+ — это цифры, которые формируются рандомно) в методе GetVersion на «return», как указано в WSDL, так как данный метод тоже не заработает без указанных манипуляций в инспекторе. В WSDL или Reference.cs это уже не поправишь, так как соответствие не однозначеное.
Можно:
8. ввести в терминале
export CATALINA_HOME=/Users/ХХХ/apache-tomcat-7.0.42

9. Этот пункт тогда не нужен, предыдущую сессию терминала просто не закрывать.
Это же было с 3 по 5 пункт.
А 9 пункт с 8 не связан, открываем терминал, чтобы запустить томкат, далее (после 9) это описано.
Может я не допонял Ваш комментарий?

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity