Comments (3)
PowerArgs is even more clever than you think (just kidding). You don't need to make your argument an Enum[] to use flags support. The comma separated syntax works even with your standard enum. And you can use Enum.HasFlag(theFlag) to test for flags in your code.
I have an example in this test:
public enum EnumWithFlags
{
Zero = 0,
One = 1,
Two = 2,
Four = 4,
Eight = 8,
Sixteen = 16,
}
public class EnumArgsWithFlags
{
public EnumWithFlags Option { get; set; }
}
[TestMethod]
public void TestEnumWithFlags()
{
var args = new string[] { "-o", "Zero,One,Two" };
var parsed = Args.Parse<EnumArgsWithFlags>(args);
Assert.AreEqual(EnumWithFlags.Zero | EnumWithFlags.One | EnumWithFlags.Two, parsed.Option);
}
from powerargs.
Interesting!
What about Enums where you don't want them to be combinable? What do you think about an amended ArgRevivers.ReviveEnum(Type t, string value, bool ignoreCase):
From:
if (value.Contains(","))
{
int ret = 0;
var values = value.Split(',').Select(v => v.Trim());
foreach (var enumValue in values)
{
...
To:
if (value.Contains(","))
{
if (!t.HasAttr<FlagsAttribute>())
{
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
stringBuilder.AppendLine("You cannot specify multiple values for type " + t.Name);
stringBuilder.AppendLine("To allow multiple values, " + t.Name + " must be decorated with the [Flags] attribute.");
stringBuilder.AppendLine("See MSDN for further details:");
stringBuilder.AppendLine(@"http://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110).aspx");
stringBuilder.AppendLine();
stringBuilder.AppendLine("Options are " + string.Join(", ", Enum.GetNames(t)));
throw new ValidationArgException(stringBuilder.ToString());
}
int ret = 0;
var values = value.Split(',').Select(v => v.Trim());
foreach (var enumValue in values)
{
...
Or is this sort of check something that would be better placed in a custom Validator/Reviver instead?
(The message doesn't necessarily have to be that verbose)
from powerargs.
I'd rather not add more restrictions. I personally have never used that FlagsAttribute, and I can imagine that others might not be either.
Like you said, you could build a [NoFlags] validator that explicitly turns off flag support for an enum. That might be a better approach.
from powerargs.
Related Issues (20)
- Add support for a warning on usage of obsolete enum value HOT 1
- Implementation of ContextAssistSearch doesn't get initialized HOT 1
- Slash (/) with positional arguments running on Linux & MacOS HOT 2
- How to specify command line parameters with double dashes (eg. --help) HOT 1
- Boolean args as 'flags'? HOT 1
- String args with 'null' as default throw unhandled exception HOT 1
- New Release Pending? HOT 1
- validation message missing for ArgCantBeCombinedWith HOT 1
- Prompting for input despite PromptIfMissing=false on Required arg HOT 3
- Allow zero-length list of argument values to be terminated by next option
- How to parse into an array? HOT 2
- Issue with scrolling in console HOT 2
- Issue running on Linux HOT 3
- Scrolling and background issues on 4.0.0. Works on 3.6.0 HOT 2
- Some links broken in README.md HOT 1
- Validator only checks first item in List arguments HOT 1
- Release 4.0.2 is not strongnamed (4.0.0 is, as well as 3.6.x) HOT 1
- Change executable name in 'help'?
- bool reviver not working
- Use param label as value
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from powerargs.