2014-12-29 29 views
0

在PowerShell中,我可以做以下與列表如何在c#中創建一個類似於powershell system.object的對象?

$obj = New-Object System.Object  
foreach ($item in $list) { 
     $obj | Add-Member -type NoteProperty -name fname -value $item.firstname 
     $obj | Add-Member -type NoteProperty -name lname -value $item.lastname 
    } 

    $obj 

,這將打印出兩列第一和最後一個名字。

在C#中,我不知道我怎麼能做到這一點。我是否需要爲每個對象創建一個自定義類?或者有沒有辦法像C#中動態地在PowerShell中執行此操作?

我得到的數據是在JSON中。我可以用JSON.net通過結果列表進行迭代,但我不知道如何把它們放到一個對象,從而

WriteObject(customObj); 

將導致相同的輸出上面。

順便說一句,這是一個PSCmdlet類的內部,所以輸出將始終轉到控制檯/ cmd窗口。

謝謝。

回答

1

在C#中,你應該在PSObject操作來實現相同的結果,你的PowerShell代碼:

PSObject obj=new PSObject(); 
obj.Properties.Add(new PSNoteProperty(fname,item.firstname)); 
obj.Properties.Add(new PSNoteProperty(lname,item.lastname)); 
WriteObject(obj); 
+0

對不起,我花了這麼長時間來驗證你的答案。我只是能夠回到任務。我跟着你的建議和ArrayList一起生成了一個可以被PowerShell輕鬆使用的好對象表。再次感謝。 – anoopb

4

你最好的選擇是使用anonymous types。你給的代碼就(可能)相當於:

var obj = new List<dynamic>(); 
foreach (var item in list) 
    obj.Add(new { fname = item.firstname, lname = item.lastname }); 
//From here, use whatever output method you would like. 

要訪問的成員,請使用obj[index].fname得到fnameindexobj[index].lname得到lnameindexobj.Select(item => item.fname)讓所有fnameIEnumerable<string> s和obj.Select(item => item.lname)得到所有lname s的IEnumerable<string>

+0

謝謝。我會試一試。 – anoopb

相關問題