如何在PowerShell中定义自定义C#类对象的字符串表示?
解决PowerShell自定义类默认不调用ToString()的问题
当你直接在PowerShell中输出自定义对象时,它默认会显示对象的公共属性(你的DataChunk类只有Count这个公共属性),而不会自动调用ToString()方法。要让PowerShell直接显示ToString()的结果,有以下几种可行方法:
方法1:用PowerShell命令临时配置显示规则
直接在PowerShell中执行以下命令(替换YourNamespace.DataChunk为你实际的命名空间+类名):
Update-TypeData -TypeName YourNamespace.DataChunk -DefaultDisplayScript { $_.ToString() }
执行后,再输入$data就会直接显示你重写的ToString()结果。这个配置只在当前PowerShell会话生效,关闭后需要重新执行。
方法2:创建永久格式文件(适合长期使用)
如果需要每次启动PowerShell都生效,可以创建自定义格式文件:
- 新建一个名为
DataChunk.Format.ps1xml的文件,内容如下(注意替换命名空间):
<?xml version="1.0" encoding="utf-8"?> <Configuration> <ViewDefinitions> <View> <Name>DataChunkView</Name> <ViewSelectedBy> <TypeName>YourNamespace.DataChunk</TypeName> </ViewSelectedBy> <CustomControl> <CustomEntries> <CustomEntry> <CustomItem> <Text>$_.ToString()</Text> </CustomItem> </CustomEntry> </CustomEntries> </CustomControl> </View> </ViewDefinitions> </Configuration>
- 将这个文件放到PowerShell的格式文件目录(比如
$HOME\Documents\WindowsPowerShell\Format,如果没有就新建),然后执行:
Update-FormatData -PrependPath "$HOME\Documents\WindowsPowerShell\Format\DataChunk.Format.ps1xml"
之后每次启动PowerShell,这个格式都会自动加载。
补充说明
你当前看到的Count输出,是因为PowerShell默认会把对象的公共属性以表格形式展示——你的DataChunk类只有Count这一个公共属性,所以就显示了它。只要配置了上述的显示规则,就能覆盖默认行为,显示ToString()的内容。
内容的提问来源于stack exchange,提问作者Alexander Kuzin
相关产品推荐
相关产品推荐

