Как авторы инструмента, мы, конечно, используем SmartInspect для входа и трассировки приложений.NET. Мы обычно используем протокол именованного канала для живого входа и (зашифровали) двоичные файлы журнала для журналов конечного пользователя. Мы используем Консоль SmartInspect в качестве средства просмотра и контролирующего инструмента.
существует на самом деле довольно много платформ журналирования и инструментов для.NET там. Существует обзор и сравнение различных инструментов на DotNetLogging.com .
Ответ Филиппа Лейбэрта описывает проблемы с вашим вопрос очень хорошо, и, вероятно, есть более четкий способ сделать то, что вы хотите. Но при этом я не вижу способа сделать то, что вы просите, без использования дополнительной переменной.
var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var lastKey;
$.each(obj, function(key, fn) {
// do stuff...
lastKey = key;
});
obj[lastKey].doStuffForLastIteration();
Переменная вашего примера называется "arr", но это вовсе не массив (это объект). Это немного сбивает с толку.
При итерации по объекту не существует такого понятия, как «последнее» свойство, потому что порядок свойств не определен конструкцией.
При итерации по массиву вы можете просто сравнить первый параметр обратного вызова с (array.length-1) для обнаружения последней итерации.
В коде (для массивов):
var arr = [ "a","b","c" ];
$.each(arr, function(i,val) { if (i == arr.length-1) ... });
Теперь, когда я увидел ваш дублированный вопрос , где вы утверждаете: «В следующих случаях это 'c': fn3» - похоже, вы могли быть после значения максимальное свойство объекта.
var obj = { 'a': fn1, 'b': fn2, 'c': fn3 };
var maxKey;
for (var key in arr) {
if (!(maxKey > key)) {
maxKey = key;
}
}
// fn will be fn3
var fn = obj[maxKey];