C# 当循环变量的值是模式LetterNumberNumber的字符串时,用于循环?

C# 当循环变量的值是模式LetterNumberNumber的字符串时,用于循环?,c#,loops,C#,Loops,我知道在循环变量为整数时使用循环。我强烈需要创建一个for循环,其中循环变量将取值A00,A01,…,A99,B00,B01,B99,…,Z99。是否允许使用混合模式作为C#中循环变量的值 在这种情况下,我们如何增加循环变量?我想做的事的草稿: 对于(字符串i=A00,A01,…,Z99;???) {…} 如果我们不允许使用这样的值作为循环变量,那么可以做些什么来处理这种情况 有什么想法吗?您可以使用双循环构建列表: for (char c = 'A'; c <= 'Z'; c++) {

我知道在循环变量为整数时使用循环。我强烈需要创建一个for循环,其中循环变量将取值A00,A01,…,A99,B00,B01,B99,…,Z99。是否允许使用混合模式作为C#中循环变量的值

在这种情况下,我们如何增加循环变量?我想做的事的草稿:
对于(字符串i=A00,A01,…,Z99;???)
{…}

如果我们不允许使用这样的值作为循环变量,那么可以做些什么来处理这种情况


有什么想法吗?

您可以使用双循环构建列表:

for (char c = 'A'; c <= 'Z'; c++)
{
    for (int i = 0; i < 100; i++)
    {
        string s = $"{c}{i:d2}";
    }
}
根据您构造
A00…Z99的逻辑,如果可能,您还可以从整数中构造字符串。你需要一些转换来完成你自己

for (int i = 0;;)
{
    string s = ConvertIntergerToSpecial(i);
}

可以使用双循环构造列表:

for (char c = 'A'; c <= 'Z'; c++)
{
    for (int i = 0; i < 100; i++)
    {
        string s = $"{c}{i:d2}";
    }
}
根据您构造
A00…Z99的逻辑,如果可能,您还可以从整数中构造字符串。你需要一些转换来完成你自己

for (int i = 0;;)
{
    string s = ConvertIntergerToSpecial(i);
}

循环变量只能是一种类型,您可以将
Int.Parse()
与子字符串或正则表达式结合使用:

using System.Text.RegularExpressions;
代码:


循环变量只能是一种类型,您可以将
Int.Parse()
与子字符串或正则表达式结合使用:

using System.Text.RegularExpressions;
代码:


可以有两个叠瓦循环来返回字符串

例如:

public IEnumerable<string> GetLabels()
{
    for (char l = 'a'; l < 'z'; l++)
    {
        for (int d = 0; d < 99; d++)
        {
            yield return string.Format("{0}{1:D2}", l, d);
        }
    }    
}
public IEnumerable GetLabels()
{
for(字符l='a';l<'z';l++)
{
对于(int d=0;d<99;d++)
{
返回string.Format(“{0}{1:D2}”,l,d);
}
}    
}

注意:收益率回报允许您拥有一个可枚举项,而无需一次构建整个组合。如果在Linq查询或foreach循环中使用,则将在需要值之前构建值。

您可以有两个叠瓦循环来返回字符串

例如:

public IEnumerable<string> GetLabels()
{
    for (char l = 'a'; l < 'z'; l++)
    {
        for (int d = 0; d < 99; d++)
        {
            yield return string.Format("{0}{1:D2}", l, d);
        }
    }    
}
public IEnumerable GetLabels()
{
for(字符l='a';l<'z';l++)
{
对于(int d=0;d<99;d++)
{
返回string.Format(“{0}{1:D2}”,l,d);
}
}    
}

注意:收益率回报允许您拥有一个可枚举项,而无需一次构建整个组合。如果在Linq查询或foreach循环中使用,值将在需要之前生成。

和不可避免的Linq变量-您可以使用Linq和Enumerable生成字母和数字序列。范围,例如:

var maxLetters=3;
var maxNumbers=3;

var values=from char c in Enumerable.Range('A',maxLetters).Select(c=>(char)c)
           from int i in Enumerable.Range(1,maxNumbers)
           select String.Format("{0}{1:d2}",(char)c,i);

foreach(var value in values)
{
    Console.WriteLine(value);
}

--------
A01
A02
A03
B01
B02
B03
C01
C02
C03
D01
D02
D03
字符相当于C#中的整数,这意味着您可以使用Enumerable.Range生成递增整数序列。Enumerable.Range将返回整数,这就是为什么需要转换回
char

还可以通过从结束字母中减去起始字母来指定要使用的数字或字母,如所示:


一旦有了索引序列,就可以使用
foreach

和不可避免的LINQ变量对其进行迭代-可以使用LINQ和Enumerable生成字母和数字序列。范围,例如:

var maxLetters=3;
var maxNumbers=3;

var values=from char c in Enumerable.Range('A',maxLetters).Select(c=>(char)c)
           from int i in Enumerable.Range(1,maxNumbers)
           select String.Format("{0}{1:d2}",(char)c,i);

foreach(var value in values)
{
    Console.WriteLine(value);
}

--------
A01
A02
A03
B01
B02
B03
C01
C02
C03
D01
D02
D03
字符相当于C#中的整数,这意味着您可以使用Enumerable.Range生成递增整数序列。Enumerable.Range将返回整数,这就是为什么需要转换回
char

还可以通过从结束字母中减去起始字母来指定要使用的数字或字母,如所示:


一旦你有了索引序列,你可以用
foreach

对它进行迭代。我喜欢这里发布的关于这个问题的其他答案,特别是LINQ方法。这里有一个单循环的方法,只是外行的编程工具

            String result = "";
            char c =  'A';
            String v = "";
            for (int i = 0; v != "Z99"; i++)    // Loop until you reach Z99
            {
                v = String.Format("{0}{1:D2}", c, i); // A00,A001.... Z99
                if (i == 99) { i = 0; c++; }  // Reset counter and increment character
                result += v +" "; // Just to display the result
            }
            MessageBox.Show(result);

我喜欢这个问题的其他答案,特别是LINQ方法。这里有一个单循环的方法,只是外行的编程工具

            String result = "";
            char c =  'A';
            String v = "";
            for (int i = 0; v != "Z99"; i++)    // Loop until you reach Z99
            {
                v = String.Format("{0}{1:D2}", c, i); // A00,A001.... Z99
                if (i == 99) { i = 0; c++; }  // Reset counter and increment character
                result += v +" "; // Just to display the result
            }
            MessageBox.Show(result);

这将有2600个条目。这将有2600个条目。我正在尝试理解/确认您的解决方案。“产量”对我来说是新概念。我希望(当用户单击按钮时)A00,…,Z99成为windows窗体中文本框中的一个值,在我检查bool变量值时,该值将自动更改(无需手动输入):情境==函数(参数1,…,参数5,…)。参数5将取值A00,…,Z99,我将根据变量情况的值做一些工作。当然,文本框可能不需要。TextBox只是为了在后期限制扫描范围。@ErdoganCEVHER您所描述的根本不是一个循环。有关收益率回报/收益率中断的更多信息:@PanagiotisKanavos,我猜是这样的。但是,我想这样做,因为对这个问题的回答可能会揭示出我对这个问题的一般处理方式。我试图理解/确认你的解决方案。“产量”对我来说是新概念。我希望(当用户单击按钮时)A00,…,Z99成为windows窗体中文本框中的一个值,在我检查bool变量值时,该值将自动更改(无需手动输入):情境==函数(参数1,…,参数5,…)。参数5将取值A00,…,Z99,我将根据变量情况的值做一些工作。当然,文本框可能不需要。TextBox只是为了在后期限制扫描范围。@ErdoganCEVHER您所描述的根本不是一个循环。有关收益率回报/收益率中断的更多信息:@PanagiotisKanavos,我猜是这样的。但是,我想这样做,因为这个问题的答案可能会为我揭示对这个问题的一般处理。非常感谢。我成功地将您的解决方案嵌入到我的工作中。它工作得很好。我把maxLetters=26;在我的项目中,maxNumbers=99。我注意到您提供的代码遗漏了00s(A00,B00,…,Z00),但这并没有影响我的工作,因为后来我注意到