C# 在for循环中是否可以“继续”foreach循环?

C# 在for循环中是否可以“继续”foreach循环?,c#,for-loop,foreach,nested-loops,continue,C#,For Loop,Foreach,Nested Loops,Continue,好吧,我想做的应该很简单。我有一个方法,可以检查字符串中的每个字符是否是从a到m的字母。我现在必须在for循环中继续foreach循环。有没有一种可能的方法来做我想做的事 public static string Function(String s) { int error = 0; foreach (char c in s) { for (int i = 97; i <= 109; i++) { if (c

好吧,我想做的应该很简单。我有一个方法,可以检查字符串中的每个字符是否是从a到m的字母。我现在必须
在for循环中继续
foreach循环。有没有一种可能的方法来做我想做的事

public static string Function(String s)
{
    int error = 0;
    foreach (char c in s)
    {
        for (int i = 97; i <= 109; i++)
        {
            if (c == (char)i)
            {
                // Here immediately continue the upper foreach loop, not the for loop
                continue;
            }
        }
        error++;
    }

    int length = s.Length;
    return error + "/" + length;
}
公共静态字符串函数(字符串s)
{
整数误差=0;
foreach(字符c在s中)
{
对于(inti=97;i我认为
('a'==(char)i)
应该是
(c==(char)i)

如果((int)c>=97&(int)c使用LINQ如何,为什么不将
替换为

int errors = s
    .Count(c => !Enumerable.Range(97, 13).Contains(c));
那么就没有必要打破这个循环

或者完全避免嵌套循环,这将提高性能:

int errors = s.Count(c => c < 97 || c > 109);
int errors=s.Count(c=>c<97 | | c>109);

char
可隐式转换为
int
,因此无需强制转换。

continue
将跳过该迭代中的后续行,如果需要
中断
循环,请使用break

public static string Function(String s)
{
    int error = 0;
    foreach (char c in s)
    {
        for (int i = 97; i <= 109; i++)
        {
            if ('a' == (char)i)
            {
                break; // break the whole looping, continue will break only the iteration
            }
        }
        error++;
    }
    string length = Convert.ToString(s.Length);
    return error + "/" + length;
}
公共静态字符串函数(字符串s)
{
整数误差=0;
foreach(字符c在s中)
{

对于(int i=97;i您可以通过中断内部循环来实现这一点,这意味着内部循环将被转义,就像迭代结束一样。在此之后,您可以使用布尔值来控制其余的底层逻辑进程是否继续:

    public static string Function(String s)
    {
        int error = 0;
        foreach (char c in s)
        {
            bool skip = false; 

            for (int i = 97; i <= 109; i++)
            {
                if ('a' == (char)i)
                {
                    skip = true;
                    break;
                }
            }

            if (skip) continue;
            error++;
        }
        string length = Convert.ToString(s.Length);
        return error + "/" + length;
    }
公共静态字符串函数(字符串s)
{
整数误差=0;
foreach(字符c在s中)
{
bool skip=false;

对于(int i=97;i正则表达式非常适合处理这种类型的“问题”,而且非常灵活……首先,您将不限于连续字符。下面的控制台应用程序演示如何使用正则表达式从目标字符串中提取所需信息

private static string TestSearchTextRegex(string textToSearch)
{
    var pattern = "[^a-m]";
    var ms = Regex.Matches(textToSearch, pattern);

    return $"{ms.Count}/{textToSearch.Length}";
}

注意

模式[[^ a-M] ]基本上说:找到一组不是(^)在字符集中的匹配。这个模式可以很容易地定义为[[^ a-MZ] ],除了字符“A-M”之外,也将“Z”看作是在错误组中不被计数的字符。


Regex
解决方案的另一个优点是,您可以使用您要查找的实际字符作为表示该字符的数字。

@Sweeper,Java问题不会直接转换为C,因为没有标签循环或标签断开语句。@Sweeper我尝试过,但不起作用。我也尝试过break;
但唯一有效的方法是
goto;
,但这对我没有帮助。@Klaycon哦,哎呀!我想这是一个Java问题……你的意思是
if(c==(char)i)
?为什么不
foreach(char c in s){if(c<'a'.\124; c>'m'){error++}
?或者甚至(使用LINQ)代码>。您可以考虑<代码>正则表达式> /> >我将示例添加到“问题”的可能解决方案中。您正在处理。这将导致
错误
增加,即使对于有效字符也是如此。这可能是解决方案,谢谢!让我试试。很荣幸,先生!如果您有任何问题,请告诉我。