commandlineparser/commandline

Implement --no-SOME_OPTION

開放

#783 建立於 2021年10月15日

 (10 則留言) (1 個反應) (0 位負責人)C# (461 個分叉)batch import
good first issuehelp wanted

倉庫指標

星標
 (4,280 顆星)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

I want these mutually exclusive options:

  • --updateParts
  • --not-updateParts

The default is to update parts, and it's disabled if the second flag is passed. The user needs to pass one flag or the other (so they don't get a behavior they didn't explicitly ask for).

Is there any way to do this? I had a go with this:

`class Options { private static bool _updateParts;

public Options(bool updateParts, bool doNotUpdateParts)
{
	_updateParts = updateParts;
	if (doNotUpdateParts) _updateParts = false;
}

[Option('c', "updateParts", SetName = "update", Required = true, Default = true)]
public static bool UpdateParts { get { return _updateParts; } }

[Option('C', "no-updateParts", SetName = "noUpdate", Required = true, Default = false)]
public static bool DoNotUpdateParts { get { return !_updateParts; } }

}`

Generally speaking this works, but it means I can't add two other options which are mutually exclusive. Imagine I now want to add:

  • --doLogging
  • --not-doLogging

I can't make them mutually exclusive because they don't belong to either set update or noUpdate.

貢獻者指南