如何在c#中创建一个类似于powershell system.object的对象?

时间:2014-12-29 16:55:52

标签: c# powershell c#-4.0 custom-object

在Powershell中,我可以使用列表

执行以下操作
$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类中,因此输出将始终转到console / cmd窗口。

谢谢。

2 个答案:

答案 0 :(得分: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获取fname indexobj[index].lname以获取lname index,{ {1}}获得所有obj.Select(item => item.fname)的{​​{1}},IEnumerable<string>获得所有fname的{​​{1}}。

答案 1 :(得分:2)

在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);