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

本文关键字:system powershell object 对象 类似于 创建 | 更新日期: 2023-09-27 18:35:31

在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# 中,我不确定如何完成此操作。是否需要为每个对象创建自定义类?或者有没有办法像在Powershell中一样在C#中动态执行此操作?

我得到的数据是JSON格式的。我可以使用 JSON.net 遍历结果列表,但我不确定如何将它们放入一个对象中,以便

WriteObject(customObj);

将产生与上述相同的输出。

顺便说一下,这一切都在PSCmdlet类中,因此输出将始终转到控制台/cmd窗口。

谢谢。

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

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

最好的选择是使用匿名类型。您给出的代码(可能)等效于:

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获取index fnameobj[index].lname获取index lnameobj.Select(item => item.fname)获取所有fnameIEnumerable<string>obj.Select(item => item.lname)获取所有lnameIEnumerable<string>