Это довольно пуленепробиваемое решение для тестирования, если переменная существует и была инициализирована:
var setOrNot = typeof variable !== typeof undefined;
Она наиболее часто используется в сочетание с тернарным оператором для установки значения по умолчанию в случае, если некоторая переменная не была инициализирована:
var dark = typeof darkColor !== typeof undefined ? darkColor : "black";
К сожалению , вы не можете просто инкапсулировать свой чек в функцию.
Вы можете подумать о том, чтобы сделать что-то вроде этого:
function isset(variable) {
return typeof variable !== typeof undefined;
}
Однако это приведет к ошибке ссылки, если вы вызываете например. isset(foo)
и переменная foo
не определены, потому что вы не можете пройти по несуществующей переменной к функции:
Uncaught ReferenceError: foo не определен
blockquote>Тестирование неопределенных параметров функции
Хотя наша функция
isset
не может использоваться для проверки наличия или отсутствия переменной (по причинам, описанным выше), это позволяет нам проверьте, не определены ли параметры функции:var a = '5'; var test = function(x, y) { console.log(isset(x)); console.log(isset(y)); }; test(a); // OUTPUT : // ------------ // TRUE // FALSE
Несмотря на то, что никакое значение для
y
не передается по функцииtest
, наша функцияisset
отлично работает в этом контексте, посколькуy
известно в функцииtest
как значениеundefined
.
OnStart должен только запускаться работа; это не ответственно за то, что сделало его. Это обычно означает порождать новый поток, чтобы сделать фактическую работу. Ожидается, что OnStart завершается быстро. Например:
public void OnStart(string[] args) // should this be override?
{
var worker = new Thread(DoWork);
worker.Name = "MyWorker";
worker.IsBackground = false;
worker.Start();
}
void DoWork()
{
// do long-running stuff
}
Метод OnStart не должен блокироваться. Необходимо породить рабочий поток, который сделает задание. Вы могли также смотреть на класс FileSystemWatcher для сканирования для уведомлений об изменении файловой системы.