2011年11月9日水曜日

$host.UIのプロンプト入力機能を使う2(補足)

PowerShell: ◆$host.UIのプロンプト入力機能を使う2ではジェネリックな「System.Collections.ObjectModel.Collection」を手作りしていたのだが、明示的にジェネリックなクラスを使わなくても暗黙にキャストしてくれることが判った。

今回の例で行くと、
System.Collections.ObjectModel.Collection<ChoiceDescription>を指定すべきところに、ChoiceDescription[]を指定すればよさそうである。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025

$class = "System.Management.Automation.Host.ChoiceDescription"
$dClass = [type]
$class
$dClassArray
 = [type]($class+"[]")

$questions =
 
 ((
"&1:巨人"),("読売ジャイアンツ")),(("&2:阪神"),("阪神タイガース")),
 (("&3:中日"),("中日ドラゴンズ")),(("&4:横浜"),("横浜ベイスターズ")),
 (("&5:ヤクルト"),("東京ヤクルトスワローズ")),(("&6:広島"),("広島東洋カープ"))
$descriptions = ($questions | %{New-Object $dclass $_}) -as 
$dClassArray

$caption
 = "<アンケート>" 
$message = "好きな球団はどこですか?"
 
 

$result =  $host.UI.PromptForChoice($caption, $message, $descriptions,2) 
Write-Host $descriptions[$result].Label.replace("&","") "ですね"
$winner = {Get-Random (0..($questions.Count-1) | %{$questions[$_][1]})}
"`n来年以降の優勝予想は"
1..4 | %{invoke-command $winner}
"となっています。"
$winner2 = Set-PSBreakpoint -Variable winner2 -Mode Read -Action
 { 
 
$script:winner2 = Get-Random (0..($questions.Count-1) | 
%{$questions[$_][1]})}
"`n2位予想は"
1..4 | %{$winner2}
"となっています。"

0 件のコメント:

コメントを投稿