LINQ StartWith与子串

时间:2018-03-13 09:42:41

标签: c# linq

两者之间的差异是什么?为什么一个工作而另一个?代码过滤以.StartWith("L_01")开头的文件名。我只能使用.Substring(0,4) == "L_01"获得结果,但不能使用// Return results Directory.GetFiles(path).Where(p => System.IO.Path.GetFileNameWithoutExtension(p).StartsWith("L_01")); // Return no result Directory.GetFiles(path).Where(p => System.IO.Path.GetFileNameWithoutExtension(p).Substring(0,4) == "L_01")) 获得结果,我认为两者之间没有任何区别。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

1 个答案:

答案 0 :(得分:5)

嗯,首先

 .StartsWith("L_01") 

更好,自第二次

 .Substring(0,4) == "L_01")

(少于4个字符长)文件名(例如L.xml

>上抛出异常

https://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx

  

ArgumentOutOfRangeException startIndex加长度表示a   位置不在此实例中。

抛出异常(并且吞下,因为看不到),例如

try {
  ...

  var files = Directory
    .GetFiles(path)
    .Where(p => Path.GetFileNameWithoutExtension(p).Substring(0,4) == _01"));

  foreach (var file in files) {
    ...
  } 
}
catch {
  // on exception thrown the loop will be broken and this code will be executed
}

你可以输掉一些文件;想象一下,Directory.GetFiles(path)按此顺序返回文件:

 L_01.xml  <- you've got it
 L_1.xml   <- exception here
 L_011.xml <- this will be lost

你只有L_01.xml继续