如何从PowerShell调用C#类上的索引器?

如何从PowerShell调用C#类上的索引器?,c#,powershell,C#,Powershell,我不知道如何让Powershell在我的课堂上调用索引器。这个类看起来像这样(大大简化了): 如果我新创建了这个类,我不能只在它上面使用括号操作符——我会得到一个“无法索引”错误。我还尝试使用get_item(),这是Reflector向我显示索引器最终在程序集中变成的内容,但这给我带来了一个“不包含名为get_item的方法”错误 更新:这是针对我使用显式接口而出现的。所以我的新问题是:有没有一种方法可以让Powershell在不切换显式接口的情况下查看索引器?(如果可能的话,我真的不想修改这

我不知道如何让Powershell在我的课堂上调用索引器。这个类看起来像这样(大大简化了):

如果我新创建了这个类,我不能只在它上面使用括号操作符——我会得到一个“无法索引”错误。我还尝试使用get_item(),这是Reflector向我显示索引器最终在程序集中变成的内容,但这给我带来了一个“不包含名为get_item的方法”错误


更新:这是针对我使用显式接口而出现的。所以我的新问题是:有没有一种方法可以让Powershell在不切换显式接口的情况下查看索引器?(如果可能的话,我真的不想修改这个程序集。)

我还没有尝试过这个,但它似乎应该可以工作:

$obj = new-object MyClass
$counters = [IIntCounters]$obj
$counters['countername']
(好的,我玩了一会儿,我认为这不太可能奏效,但还是值得一试。)

这对我来说很有效(使用反射):


是的,这与$obj.Counters['countername']差不多……不起作用:(我认为它可能会起作用的原因是,显式实现的接口只能通过对接口的引用来访问,而不能通过对实现类的引用来访问。不幸的是,当您将类引用转换为接口引用时,PowerShell仍然将其视为对派生最多的类的引用。对,但调用“计数器”'返回一个IIntCounters,它是对接口的引用,而不是对类的引用。不过,您的观点对于posh通过接口查看类本身是很有意思的。如果它总是在引用上进行反射以找到下面真正的具体对象,那么这可能解释了这个问题。嗯..可能能够安装新的方法来包装up显式接口索引器。。
$obj = new-object MyClass
$counters = [IIntCounters]$obj
$counters['countername']
$obj = new-object MyClass
$p = [IIntCounters].GetProperty("Item")
$p.GetValue($obj, @("counterName"))