1

我试图在列表中只获得奇怪的参数。这是我的一段代码

static void Main(string[] args)
{
     var swictches = args.ToList().Select((x, index) => (index % 2) == 1);
     var ss = swictches[0];

     string test = doc.ReadAllPages();
     Console.WriteLine(test.Substring(0, 1000));
     Console.Read();
}

在参数列表中,它具有开关和参数。我正在尝试获取所有开关。当我运行此代码时,switch 变量如下所示:

false
true
false

而不是这样

-i
-awq
-l
4

3 回答 3

6

使用Where代替Select

var swictches = args.Where((x, index) => (index % 2) == 1).ToList();
  • Where根据指定的谓词过滤项目。
  • Select将元素从一种格式投影到另一种格式(代码中的 from stringto bool)。

此外,您不必调用ToList()使用Where/ Selectstring[]也可以实现IEnumerable<string>,因此您可以在其上使用 LINQ。而不是ToList在开始时调用它作为最后一个方法,将结果实例化为List<string>.

编辑:

正如评论中指出的那样。当您只需要序列中的第一个元素时,您应该使用First,而不是在结果上调用ToList()和使用[0]。它会更快:

var ss = args.Where((x, index) => (index % 2) == 1).First();
于 2013-09-09T19:53:36.773 回答
2

var switchFixed = args.Where((item, index) => index % 2 != 0); //返回偶数参数

var switchFixed = args.Where((item, index) => index % 2 == 0); //返回奇数参数

于 2013-09-09T20:06:36.413 回答
1

查找所有开关的另一种变体:
args.Where(s => s.StartsWith("-")).ToList()

于 2013-09-09T20:00:24.027 回答