0

在 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类中,所以输出总是会转到控制台/cmd窗口。

谢谢你。

4

2 回答 2

4

您最好的选择是使用匿名类型。您提供的代码(可能)相当于:

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].fnameto get the fnameat indexobj[index].lnameto get the lnameat indexobj.Select(item => item.fname)to get an IEnumerable<string>of all fnames 和obj.Select(item => item.lname)to get an IEnumerable<string>of all lnames。

于 2014-12-29T17:39:00.527 回答
3

在 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);
于 2015-01-18T15:14:50.220 回答