Недавно я начал экспериментировать с Binary PowerShell Programming в С#, и у меня возникают некоторые проблемы с ParameterValidationAttributes, атрибутом ValidateScript в основном. В принципе, я хочу создать параметр с именем "имя_компьютера" и проверить, что компьютер в это время находится в сети. Это было легко в PowerShell:
[Parameter(ValueFromPipeLine = $true)]
[ValidateScript({ if (Test-Connection -ComputerName $_ -Quiet -Count 1) { $true } else { throw "Unable to connect to $_." }})]
[String]
$ComputerName = $env:COMPUTERNAME,
Но я не могу понять, как воспроизвести это на С#. атрибут ValidateScript принимает объект ScriptBlock http://msdn.microsoft.com/en-us/library/system.management.automation.scriptblock(v=vs.85).aspx im просто не уверен, как создать его на С#, и я не могу найти ни одного примера.
[Parameter(ValueFromPipeline = true)]
[ValidateScript(//Code Here//)]
public string ComputerName { get; set; }
С# для меня очень новичок, поэтому я придумываю, если это глупый вопрос. здесь ссылка: класс атрибута ValidateScript: http://msdn.microsoft.com/en-us/library/system.management.automation.validatescriptattribute(v=vs.85).aspx
Это не возможно в С#, так как.NET только позволяет компилировать временные константы, typeof
выражений и выражений создания массива для параметров атрибутов и только константы для ссылочных типов другие, то string
является null
. Вместо этого вы должны получить значение ValidateArgumentsAttribute
и переопределить Validate
для выполнения проверки:
class ValidateCustomAttribute:ValidateArgumentsAttribute {
protected override void Validate(object arguments,EngineIntrinsics engineIntrinsics) {
//Custom validation code
}
}
ValidateScriptAttribute
.