Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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# 为什么我是++&引用;无法访问的代码;?_C#_Loops_Visual Studio - Fatal编程技术网

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));
}