Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为C#commandlets的SwitchParameter提供默认值_C#_Powershell_Commandlet - Fatal编程技术网

如何为C#commandlets的SwitchParameter提供默认值

如何为C#commandlets的SwitchParameter提供默认值,c#,powershell,commandlet,C#,Powershell,Commandlet,以下是commandlet,我需要它能够通过提供开关“卸载”或“安装”开关来操作。默认情况下,存在“安装” [Cmdlet(VerbsLifecycle.Install, "MyPackage")] [UsedImplicitly] public class InstallMyPackageCommand : PSCmdlet { [UsedImplicitly] [Parameter(Position =

以下是commandlet,我需要它能够通过提供开关“卸载”或“安装”开关来操作。默认情况下,存在“安装”

    [Cmdlet(VerbsLifecycle.Install, "MyPackage")]
    [UsedImplicitly]
    public class InstallMyPackageCommand : PSCmdlet
    {            
        [UsedImplicitly]
        [Parameter(Position = 0, Mandatory = false, ParameterSetName = "Uninstall")]
        public SwitchParameter Uninstall { get; set; } = !SwitchParameter.Present;

        [UsedImplicitly]
        [ValidateNotNullOrEmpty]
        [ValidateNotNull]
        [Parameter(Position = 1, Mandatory = true)]
        public string Path { get; set; }

        protected override void BeginProcessing()
        {
            base.BeginProcessing();
        }
    }
但上面的代码没有将未提供的开关识别为“卸载”,并尝试将文件路径与第一个开关参数绑定,该参数完全不是文件路径。即使第一个参数也不是管理性的,并且存在默认值

当我发出命令“Install MyPackage”C:\Projects\msippackages“

参数“Uninstall”所需


任何人都可以告诉我它的解决方案。

我认为可以将SwitchParameter的默认值指定为:

  public SwitchParameter Install { get; set; } = SwitchParameter.Present;

虽然您自己的回答在技术上确实回答了您关于如何为开关参数设置默认值的问题。但由于以下几个原因,不建议按照您描述的方式使用它

带有Install等动词的函数应该与其关联的对立面(如果有意义的话)成对运行。用户希望运行
Install MyPackage
,然后运行
Uninstall MyPackage
,而不是
Install MyPackage-Uninstall
。以下是示例列表供参考

开关参数通常默认为“关闭”和“打开”“仅当指定时。虽然可以使用显式值指定开关参数,如
-MySwitch:$false
,但大部分用户不知道这一点。如果不查看函数的完整
Get Help
输出,也无法真正发现它


简而言之,请不要这样做。您的用户将感谢您。

编译器错误是什么?在
[Parameter()]
属性中设置两个不同的
参数setname
值。求求你,这里没有提到这件事
  public SwitchParameter Install { get; set; } = SwitchParameter.Present;