3

列挙型で配列を解析できるコマンド ライン パーサーを探しています。CommandlineParser は、int または string を使用した配列の解析をサポートしていますが、enum はサポートしていません。例えば

 [OptionArray("o", "output", HelpText = "The output files to generate.", DefaultValue = new[] { "OptimizeFor.Accuracy", "OptimizeFor.Speed" })]
  public string[] OutputFiles { get; set; }

正常に動作します。しかし、以下のものではありません:

 public enum OptimizeFor
        {
            Unspecified,
            Speed,
            Accuracy
        }
    [OptionArray("o", "output", HelpText = "The output files to generate.", DefaultValue = new[] { OptimizeFor.Accuracy, OptimizeFor.Speed })]
    public OptimizeFor[] OutputFiles { get; set; }
4

2 に答える 2

-1

これがあなたが探しているものかどうかわからない場合は、正しい軌道に乗る必要があります。

public enum OptimizeFor
{
    Unspecified,
    Speed,
    Accuracy
}

public class EnumParser
{
    public static IEnumerable<TEnum> FindSelected<TEnum>(IEnumerable<string> enumItemNames)
    {
        var selectedOtions = Enum.GetNames(typeof(TEnum))
            .Intersect(enumItemNames, StringComparer.InvariantCultureIgnoreCase)
            .Select(i => Enum.Parse(typeof(TEnum), i))
            .Cast<TEnum>();
        return selectedOtions;
    }
}

class Program
{
    static void Main(string[] args)
    {
        //Some fake arguments
        args = new[] {"-o", "SPEED", "accuracy", "SomethingElse"};

        var selectedEnumVals = EnumParser.FindSelected<OptimizeFor>(args);

        selectedEnumVals.Select(i => i.ToString()).ToList().ForEach(Console.WriteLine);
        Console.Read();
    }
}
于 2012-06-25T17:11:24.347 に答える