使用C#中的for循环和字符串组合填充字符串数组

时间:2012-05-06 04:13:10

标签: c# arrays string for-loop

我有一个定义为String[] sEmails;的字符串数组,我试图填充10个不同(但相似)的字符串(在这种情况下是电子邮件地址)。

这是我试图用来填充数组的代码。

public void populateEmailArray()
    {
        for (int x = 0; x < 10; x++)
        {
            switch(x)
            {
                case 1:
                    sEmails[x] = sRepStuff + "1" + sGmail; 
                break;
                case 2:
                    sEmails[x] = sRepStuff + "2" + sGmail;
                break;
                case 3:
                    sEmails[x] = sRepStuff + "3" + sGmail;
                break;
                case 4:
                    sEmails[x] = sRepStuff + "4" + sGmail;
                break;
                case 5:
                    sEmails[x] = sRepStuff + "5" + sGmail;
                break;
                case 6:
                    sEmails[x] = sRepStuff + "6" + sGmail;
                break;
                case 7:
                    sEmails[x] = sRepStuff + "7" + sGmail;
                break;
                case 8:
                    sEmails[x] = sRepStuff + "8" + sGmail;
                break;
                case 9:
                    sEmails[x] = sRepStuff + "9" + sGmail;
                break;
            }
        }
    }

最终结果我希望是这样的

sEmails['repstuff1@gmail.com','repstuff2@gmail.com','repstuff3@gmail.com']等等,再到repstuff9@gmail.com

但是在尝试设置sEmails[x]的第一次尝试时,它给出了一个错误:“NullReferenceException未处理。对象引用未设置为对象的实例。”

我不知道我在这里做错了什么,因为代码似乎在我的脑海中。对此的任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

尝试使用

实例化数组
String[] sEmails = new String[10];

你也可以使这个循环更简洁:

public void populateEmailArray()
{
    for (int x = 0; x < 10; x++)
    {

        sEmails[x] = sRepStuff + x + sGmail; 
    }
}

答案 1 :(得分:0)

数组开始索引为0而不是1,因此您没有给sEmails[0]一个值。将所有值向下移动1.然后当您访问sEmails [0]时,它仍然是null。您还应确保已实例化您的sEmails数组:

sEmails = new String[10];

这应该有效:

public void populateEmailArray()
{
       sEmails = new String[10];
        for (int x = 0; x < 10; x++)
        {
            switch(x)
            {
                case 0:
                    sEmails[x] = sRepStuff + "1" + sGmail; 
                break;
                case 1:
                    sEmails[x] = sRepStuff + "2" + sGmail;
                break;
                case 2:
                    sEmails[x] = sRepStuff + "3" + sGmail;
                break;
                case 3:
                    sEmails[x] = sRepStuff + "4" + sGmail;
                break;
                case 4:
                    sEmails[x] = sRepStuff + "5" + sGmail;
                break;
                case 5:
                    sEmails[x] = sRepStuff + "6" + sGmail;
                break;
                case 6:
                    sEmails[x] = sRepStuff + "7" + sGmail;
                break;
                case 7:
                    sEmails[x] = sRepStuff + "8" + sGmail;
                break;
                case 8:
                    sEmails[x] = sRepStuff + "9" + sGmail;
                break;
                case 9:
                    sEmails[x] = sRepStuff + "10" + sGmail;
                break;
            }
        }
    }

更好,更简洁的版本将是:

for(int i = 0; i < 10 ; i++)
{
   sEmails[i]="repstuff"+(i+1)+"@gmail.com";
}

答案 2 :(得分:0)

希望你做得很好。

我今天会帮你清理你的代码!

而不是做一个开关案例,你可以这样做

for(int i = 0; i < 10 ; i++)
{
   emails[i]="repstuff"+i+"@gmail.com";
}

这可以帮助您清除编码风格。另外,您是否检查过是否已实例化/创建了sEmails,repStuff和Gmail?

答案 3 :(得分:0)

对于你已经接受的解决方案,我会添加一些“spice”以使其更具动态性。我不会设置10个硬编码,但我会使用数组的长度。

public void populateEmailArray()
{
    int length = sEmails.Length;

    for (int x = 0; x < length; x++)
    {

        sEmails[x] = sRepStuff + x + sGmail; 
    }
}

当我不得不在一段时间之后返回程序并且必须记住并检查我必须更改的所有要点时,我不相信我的记忆,例如你的电子邮件阵列必须长到20个元素。