Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ StartWith vs.Substring_C#_Linq - Fatal编程技术网

C# LINQ StartWith vs.Substring

C# LINQ StartWith vs.Substring,c#,linq,C#,Linq,两者之间的区别是什么?为什么一个有效而另一个无效?代码过滤以“L\u 01”开头的文件名。我只使用.StartWith(“L_01”)获得结果,而不使用.Substring(0,4)=“L_01”,我看不出两者之间有任何区别 // Return results Directory.GetFiles(path).Where(p => System.IO.Path.GetFileNameWithoutExtension(p).StartsWith("L_01")); // Retu

两者之间的区别是什么?为什么一个有效而另一个无效?代码过滤以
“L\u 01”
开头的文件名。我只使用
.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"))
嗯,首先

 .StartsWith("L_01") 
从第二名开始,更好吗

 .Substring(0,4) == "L_01")
对短文件名(长度小于
4
个字符)引发异常,如
L.xml

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

当抛出异常时(由于您看不到它,所以将其吞没),例如

你很可能会丢失一些文件;假设
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首先

 .StartsWith("L_01") 
从第二名开始,更好吗

 .Substring(0,4) == "L_01")
对短文件名(长度小于
4
个字符)引发异常,如
L.xml

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

当抛出异常时(由于您看不到它,所以将其吞没),例如

你很可能会丢失一些文件;假设
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第一种方法更好,因为第二种方法在
L.xml
文件“我只使用
.StartsWith(“L_01”)
获得结果”上抛出异常-这是因为第二种方法抛出异常(如Dmitry所述),而您正在吞咽该异常吗?真的,使用调试器。那个么,至少你们可以给我们展示一个精确的字符串,这个字符串会为你们带来意想不到的结果。到目前为止,所有的答案都只是猜测。@Evk说了些什么。阅读并提供答案,并解释“不起作用”的含义。这里不需要使用不可生成的
目录.GetFiles(path)
,因为我们无法查看您的文件系统。创建一个硬编码的
列表{“…”,“…”}
以在上执行
Where()
。如果这没有重现您的问题(我可以告诉您它没有),那么问题不在
StartsWith
子字符串中,而是在您的数据中。第一个更好,因为第二个在
L.xml
文件中抛出异常“我只在
.StartsWith(“L_01”)
中获得结果”-这是因为第二种方法抛出异常(如Dmitry所述),而您正在吞咽该异常吗?真的,请使用调试器。那个么,至少你们可以给我们展示一个精确的字符串,这个字符串会为你们带来意想不到的结果。到目前为止,所有的答案都只是猜测。@Evk说了些什么。阅读并提供答案,并解释“不起作用”的含义。这里不需要使用不可生成的
目录.GetFiles(path)
,因为我们无法查看您的文件系统。创建一个硬编码的
列表{“…”,“…”}
以在上执行
Where()
。如果这没有重现你的问题(我可以告诉你它没有),那么问题不在
StartsWith
Substring
,而是在你的数据中。这就是为什么第一个可能更好的原因,但它没有回答为什么
的问题。Substring(0,4)=“L_01”
没有给出答案results@Chriz事实上可能是这样;我的猜测是OP没有使用
子字符串
获得结果的原因是他们有一个
try
/
catch
块,该块吞没了可能发生的异常,但是OP没有发布完整的代码片段。我与给定的信息争论+如果它在同一目录中的第一位起作用,那么在第二位应该会有一些结果well@Dmitry拜琴科,非常感谢。这就解决了我的问题。我意识到有小于4个字符的字符串,并且不知道与小于其长度的字符串相比,子字符串引发异常。这就是为什么第一个字符串可能更好的原因,但它没有回答为什么
。子字符串(0,4)=“L_01”
不给出results@Chriz事实上可能是这样;我的猜测是OP没有使用
子字符串
获得结果的原因是他们有一个
try
/
catch
块,该块吞没了可能发生的异常,但是OP没有发布完整的代码片段。我与给定的信息争论+如果它在同一目录中的第一位起作用,那么在第二位应该会有一些结果well@Dmitry拜琴科,非常感谢。这就解决了我的问题。我意识到有小于4个字符的字符串,并且不知道当与小于其长度的字符串进行比较时,子字符串抛出异常。