5

gsscoder によって作成された C# 用のCommandLineパーサー ライブラリがあります (独自の SO タグがあり、追加しています)。コマンドラインオプションをgetoptスタイルで解析します。つまり、次のようになります。

myprogram --foo --bar=baz abc def ghi

また、いわゆる「バインドされていない」パラメーター、つまり、オプションにバインドされていない独立した位置パラメーターを持つこともできます。上記の例ではabcdef、 、およびghiです。残念ながら、ドキュメントには「パーサーにはこれらを処理する手段がある」としか書かれておらず、例が示されていません。また、私の C# はそれほどシャープではないため、スキャンして見つけ出すソース コードの量に戸惑っています。

解析後にこれらのバインドされていないパラメーターにアクセスする方法の例を教えてください。

4

1 に答える 1

6

を使用します( CodePlex のドキュメントをValueList[Attribute]参照):

オプションによってキャプチャされない各値は、System.Collections.Generic.IListから派生した文字列のコレクションに含めることができます。

明らかに、この属性には名前がなく、 System.Attributeから直接派生します。 現時点ではこれが唯一の例外ですが、将来同様のものがある可能性を排除するものではありません。

例 (上記リンクのページから):

class Options
{
  // ...
  [ValueList(typeof(List<string>), MaximumElements = 3)]
  public IList<string> Items { get; set; };
  // ...
}

どこValueList

  1. type のプロパティに割り当てる必要がありますIList<string>
  2. IList<string>コンストラクターは、 asから派生した型を受け入れる必要がありList<string>ます。
  3. MaximumElementsプロパティが 0 より大きい数値に設定されている場合、制限を超えるとパーサーは失敗します。
  4. 0 に設定MaximumElementsすると、オプションから関連付けられていない値を受け入れないことを意味します。
  5. (-1)のデフォルトの暗黙的な設定ではMaximumElements、値の数に制限はありません。
于 2016-05-27T18:37:48.877 に答える