1

我正在尝试发送一封电子邮件,其中发件人和收件人电子邮件地址(以及主题和正文内容)根据提供给该方法的值而变化。最好用代码本身来解释:

public void EmailNotification(int emailAction)
    {

        MailAddress to;
        MailAddress from;
        string subject;
        string body;

        switch (emailAction)
        {
            case 1:
                // Comment approved
                to = new MailAddress("someone@theirdomain.com");
                from = new MailAddress("no-reply@thisdomain.com");
                subject = "Comment approved";
                body = @"The comment you posted has been approved";
                break;
            case 2:
                // Comment rejected
                to = new MailAddress("someone@theirdomain.com");
                from = new MailAddress("no-reply@thisdomain.com");
                subject = "Comment rejected";
                body = @"The comment you posted has been rejected";
                break;
        }

        MailMessage message = new MailMessage(from, to);
        message.Subject = subject;
        message.Body = body;
        SmtpClient client = new SmtpClient();

        try
        {
            client.Send(message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception caught in EmailNotification: {0}", ex.ToString());
        }
    }

所以问题是,由于范围如何与开关一起工作,to、from、subject 等的值在开关之外无法识别,即使我已经在开关之外声明了它们(可能是错误的?)。

我是 .NET 新手,因此对于如何完成此类事情的任何建议将不胜感激。

4

3 回答 3

3

问题是您没有初始化变量。如果 的值emailAction既不是0或,你的变量的值是1什么?它们将未初始化,这是非法的。所以要么初始化它们,要么default:在你的 switch 语句中添加一个抛出异常的子句。任何一个:

MailAddress to = null;
MailAddress from = null;
string subject = null;
string body = null;

或者:

switch (emailAction)
{
    ...
    default: throw new InvalidOperationException("Action not recognized: " + emailAction);
}
于 2012-05-29T16:19:43.527 回答
1

您需要将变量初始化为默认值,或者在default案例中初始化它们。不保证 switch case 会执行,因此编译器不知道这些值将被初始化。

于 2012-05-29T16:20:23.057 回答
1

我认为范围没有问题,但确保值被初始化的问题。

将“Case 2:”替换为“Default:”将允许代码编译,将空值设置为变量(将 MailAddresses 设置为 null,将字符串设置为 null 或“”),但我不建议这样做。

简而言之,它失败的原因是,如果 emailAction 等于 3 或 1 或 2 以外的任何值,则 switch 语句中不会执行任何操作,然后您将尝试在表达式中使用未初始化的变量。

有关什么是初始化的更多信息(对不起,如果这对您来说太低了),请尝试阅读: http: //www.inf.unibz.it/~calvanese/teaching/06-07-ip/lecture-notes/uni02 /node18.html

于 2012-05-29T16:29:11.503 回答