C# 为什么我是++&引用;无法访问的代码;?
编辑C# 为什么我是++&引用;无法访问的代码;?,c#,loops,visual-studio,C#,Loops,Visual Studio,编辑 /// <summary> /// Finds the first sheet that has cells that match all the criteria. /// </summary> /// <param name="wb"></param> /// <param name="searches"></param> /// <returns></returns> public sta
/// <summary>
/// Finds the first sheet that has cells that match all the criteria.
/// </summary>
/// <param name="wb"></param>
/// <param name="searches"></param>
/// <returns></returns>
public static ISheet FindSheet( this IWorkbook wb, params string[] searches )
{
if( null == wb || null == searches )
return null;
for( int i = 0; i < wb.NumberOfSheets; i++ )
{
var sheet = wb.GetSheetAt( i );
if( searches.All( s => null != sheet.FindCell( s ) ) )
return sheet;
}
return null;
}
我把这个放在这里,尽管它让我看起来很愚蠢,因为如果你工作到深夜,不注意的话,它是一种微妙的虫子,会咬你。VisualStudio拥有这样一个智能解析器,这真是太好了
基本上我忽略了嵌套循环,因此continue
语句在这里基本上毫无价值,因为它是在继续foreach
循环,而不是for
循环
原始问题
我正在工作簿上运行搜索,查找与所有字符串搜索条件匹配的工作表。在Visual Studio编辑器中,i++
被下划线为“无法访问的代码”
在这里,您的for循环完全无用。在第一次迭代之后,不管发生什么,它都将返回。确保foreach循环有一个
continue
语句,但这只适用于foreach
循环。这就是您的代码无法访问的原因
因此,仅分析第一张图纸。如果这是您想要的,您可以简单地删除for
循环,并将工作表的目标定为索引0,或者您需要重新安排您的循环。Eric Lippert已经介绍了当您在内部循环中要继续外部循环时,您可以做些什么
他标记为“很棒”的技术是在可能的情况下消除所有循环,事实上,我相信这在这里是可能的:
public static ISheet FindSheet( this IWorkbook wb, params string[] searches )
{
if( null == wb || null == searches ) { return null; }
return wb.FirstOrDefault(sh => searches.All(sr => sh.FindCell(sr) != null));
}
对于CodeReview来说,这不是主题,但是,continue继续
foreach
循环,而不是for
循环。。。只是说,现在投票关闭返回表代码>语句总是阻止它到达for
循环的末尾。为什么是Yoda条件?嘿,Bruce。。。。欢迎来到CodeReview。将标签添加到循环并在“继续”上使用时。。。你为什么不把代码带回来检查一下呢?似乎我们可以提出一些建议……;-)不,不是。。。因为距离continue语句最近的循环是foreach
循环。在Java中,他可以命名循环并指定要继续的循环,但在C#中不能这样做。谢谢。我在你回答的时候发布了一个编辑。我把这个标记为答案。就是通过犯这样的错误来学习语言的机制。别担心,我们都去过^^美好的我刚才才意识到,IWorkbook
也是IEnumerable
,因此这是一个很好的解决方案。我刚才意识到,您的方法与Eric的示例具有完全相同的目的。:)
public static ISheet FindSheet( this IWorkbook wb, params string[] searches )
{
if( null == wb || null == searches ) { return null; }
return wb.FirstOrDefault(sh => searches.All(sr => sh.FindCell(sr) != null));
}