我想在我的静态PowerShell 5.0类中使用func委托:
我遇到了一些问题,无法找到为我的委托分配其他静态类方法的方法。
此代码有效,但不太方便。
这里有更好的方法来使用委托吗?
我需要实现我的静态! class,只是为了获得类型。
我尝试了outcommented行,你将如何使用.NET类型,但它不适用于我自己的类。
如何让我的静态类的类型更优雅?
并且,BTW,GetMethod()没有加入BindingFlags参数,为什么?
class Demo
{
hidden static [object] Method_1([string] $myString)
{
Write-Host "Method_1: $myString"
return "something"
}
hidden static [object] Method_2([string] $myString)
{
Write-Host "Method_2: $myString"
return $null
}
hidden static [object] TheWrapper([string]$wrappedMethod, [string] $parameter)
{
# do a lot of other stuff here...
#return [System.Type]::GetType("Demo").GetMethod($wrappedMethod).CreateDelegate([Func``2[string, object]]).Invoke($parameter)
return [Demo]::new().GetType().GetMethod($wrappedMethod).CreateDelegate([Func``2[string, object]]).Invoke($parameter)
}
static DoWork()
{
Write-Host ([Demo]::TheWrapper('Method_1', 'MyMessage'))
[Demo]::TheWrapper('Method_2', 'c:\my_file.txt')
}
}
[Demo]::DoWork()
答案 0 :(得分:1)
您不需要创建[demo]
的实例,因为[demo]
是该类的实际类型。此外,您可以将委托类型更简单地编写为[Func[string,object]]
。这简化了TheWrapper
方法的主体
return [Demo].GetMethod($wrappedMethod).CreateDelegate([Func[string, object]]).Invoke($parameter)
但是在PowerShell中执行此操作的一种更简单的方法是通过将其名称传递给“。”来获取方法。运算符然后调用结果:
return [demo]::$wrappedMethod.Invoke($parameter)
在PowerShell中,'。'的右侧。运算符不需要是常量。您可以使用一个表达式来生成要检索的方法(或属性)的名称。