已编辑以减少对预期目标的混淆
是否可以创建任何可以将常用模式应用于函数的注释?
示例可以是标准错误处理例程。不必使用错误处理函数实现相同的try / catch结构,最好有一个属性或注释,我可以用它来装饰函数,从而实现公共模式,而不需要在每个函数中使用相同的显式代码
也许这是试图让PowerShell做一些不应该做的事情,但我想避免一些我在脚本中最常见的重复。
答案 0 :(得分:5)
您只需从ValidateArgumentsAttribute
类继承并在Validate
方法中提供自定义验证逻辑:
C#:
Add-Type @‘
using System;
using System.Management.Automation;
public class ValidateIsEvenAttribute : ValidateArgumentsAttribute {
protected override void Validate(object arguments, EngineIntrinsics engineIntrinsics) {
if(LanguagePrimitives.ConvertTo<int>(arguments)%2==1) {
throw new Exception("Not even");
}
}
}
’@
PowerShell v5:
class ValidateIsOddAttribute : Management.Automation.ValidateArgumentsAttribute {
[void] Validate([object] $arguments, [Management.Automation.EngineIntrinsics] $engineIntrinsics) {
if($arguments%2-eq0) {
throw 'Not odd'
}
}
}
然后您可以将该属性应用于函数参数:
function f { param([ValidateIsEven()]$i, [ValidateIsOdd()] $j) $i, $j }
f 2 1 #OK
f 2 2 #Error
f 1 1 #Error