Ich würde erwarten, erwarten, $ c enthält eine leere Liste
Sie sollten nicht Das ist kein Python-ähnliches Listenverständnis, das immer eine Liste aufbaut - auch wenn die Liste leer ist.
Es ist ein Putting-Objekte durch die Rohrleitung, durch einen Filtertest, und Speichern der Pipeline ausgegeben. Wenn nichts durch den Filter kommt, gibt es keine Ausgabe zum Speichern. Die Pipeline erzeugt kein leeres Array aus dem Nichts - das wäre irreführend und ärgerlich. Hier wird die Antwort über das Array-Konstruktor herkommt - Umwickeln mit @(...)
ist ein Array mit der Pipeline-Ausgang als Inhalt Aufbau und kein Ausgabemittel ein leeres Array.
Und Sie nehmen Risiken durch .Length
statt .Count
verwenden. z.B. wenn Sie mit Streichern das täte, dann wäre eine Kreuzung von nichts keine Länge zurück, eine Kreuzung zweier Einzelteile würden 2 zurück, aber eine Kreuzung von einem Punkt würde die Länge der Zeichenfolge zurück:
$a = 'abc','cde','def'
$b = 'ghi','jkl','def'
$c = $a |?{$b -contains $_} #c = 'def'
$c.length # 1 item, length 3
Es ist kein Problem, wenn Sie mit Zahlen arbeiten, die keine Längeneigenschaft haben, aber ich denke, es ist eine bessere Idee, gewöhnlich .Count
zu verwenden, um die Anzahl der Elemente in einer Sammlung zu erhalten.
Siehe auch diese Antwort: https://stackoverflow.com/a/26513523/478656 für verwandte Diskussion über Länge vs Count-Eigenschaften und wie sie in PSv3 + geändert wurden, um das Arbeiten mit leeren Dingen einfacher zu machen.
Was mich zu Ihrem Anspruch bringt:
ich ein $null
(die eine Ausnahme ausgibt, wenn für .length
abgefragt)
Es ... nicht?
($null).Length # $null in PSv2, 0 in PSv4, PSv5.1. No exception.
Es sei denn, Sie laufen im "strikten" Modus?
$ null.Length 0 zurück, mit Powershell 5 –
Was ist Ihre Powershell-Version? – Matt
der Code, den ich getestet habe, lief auf 4.0 – ekkis