2016-11-16 5 views
0

у меня есть:Как проверить, установлен ли объект?

'Set logFileObj = fso.CreateTextFile("cit.log",True)  
if logFileObj = "" then 
    WScript.StdOut.WriteLine "logFileObj not set" 
else 
    WScript.StdOut.WriteLine "logFileObj set" 
end if 

Это работает. Тогда я стараюсь:

Set logFileObj = fso.CreateTextFile("cit.log",True)  
if logFileObj = nothing then 
    WScript.StdOut.WriteLine "logFileObj not set" 
else 
    WScript.StdOut.WriteLine "logFileObj set" 
end if 

и я получаю Microsoft VBScript runtime error: Object doesn't support this property or method

Я заменил if logFileObj = "" then с if logFileObj = nothing then

+3

Возможный дубликат [проверить, если установить объект в VBScript] (http://stackoverflow.com/questions/6849638/check-if-set-object-in -vbscript) – Lankymart

+0

Ничего себе, вороны действительно спускаются на них быстро, стыдно, что они не отмечают их как дубликаты так же быстро! Сколько раз вы думаете * «Как проверить, установлен ли объект?» * Спрашивали на протяжении многих лет? – Lankymart

+1

@ Lankymart Я буквально просто прочитал этот пост, я искал ответ в течение примерно 5-10 минут. Этот ответ на сообщение даже не содержит инструкции «если», поэтому он не ответил на мой вопрос - и я не сделал вывод ответ от него –

ответ

1

Чтобы сравнивать что-то Nothing, вам необходимо использовать Is, а не =:

Set logFileObj = fso.CreateTextFile("cit.log", True) 
If logFileObj Is Nothing Then 
    WScript.StdOut.WriteLine "logFileObj not set" 
Else 
    WScript.StdOut.WriteLine "logFileObj set" 
End If 

Это потому, что = не может быть использована для сравнения ссылок на объекты в VBScript, и Nothing является ссылка на пустой объект.

Смотрите документацию по Nothing для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx

+2

Вы должны знать лучше, этот вопрос является очевидным дубликатом. – Lankymart

+1

Спасибо за (не так очевидный дубликат) ответ - это намного яснее, чем ответ от другого вопроса - именно то, что я искал:) –

+0

@code_fodder Это точно такая же проблема, если этот ответ «яснее» «Это нормально, это там не здесь, как я сказал, что Кейт должен знать лучше. – Lankymart

-2

Вы можете использовать IsObject для этого, как показано в коде ниже: -

if isobject(logFileObj) then 
    WScript.StdOut.WriteLine "logFileObj not set" 
else  
    WScript.StdOut.WriteLine "logFileObj set" 
end if 
+0

Этот ответ неверен. IsObject вернет TRUE, если выражение является автоматическим объектом. Также 2 других сразу после друг друга не работают. – Mono

+0

Что значит автоматизированный объект? – Webdev

+0

Вы можете игнорировать автоматизацию. Дело не в этом. Дело в том, что IsObject (logFileObj) возвращает true, когда вы устанавливаете logFileObj = Nothing. Которого не было, о чем попросили. Это только говорит вам, является ли переменная типа объекта, а не если она установлена ​​или нет. – Mono

Смежные вопросы