我正在尝试发送一封电子邮件,其中发件人和收件人的电子邮件地址(以及主题和正文内容)会根据提供给该方法的值发生变化。最好用代码本身来解释:
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新手,所以对于如何做这类事情的任何建议都将不胜感激。
答案 0 :(得分:3)
问题在于您没有初始化变量。如果emailAction
的值不是0
或1
,那么变量的值会是多少?他们将是未初始化的,这是非法的。因此,要么初始化它们,要么在引发异常的switch语句中添加default:
子句。之一:
MailAddress to = null;
MailAddress from = null;
string subject = null;
string body = null;
或者:
switch (emailAction)
{
...
default: throw new InvalidOperationException("Action not recognized: " + emailAction);
}
答案 1 :(得分:1)
您需要将变量初始化为默认值,或者在default
情况下初始化它们。切换情况不能保证执行,因此编译器不知道值将被初始化。
答案 2 :(得分:1)
我不认为范围存在问题,但确保值初始化存在问题。
交换“Case 2:”for“Default:”将允许代码编译,将空值设置为变量(将MailAddresses设置为null,将字符串设置为null或“”)但我不建议。
简而言之,它失败的原因是如果emailAction等于3,或者除了1或2以外的任何东西,那么在switch语句中就不会执行任何操作,那么你会尝试在一个中使用未初始化的变量。表达
有关初始化的详细信息(对不起,如果这对您来说太低级别),请尝试阅读:http://www.inf.unibz.it/~calvanese/teaching/06-07-ip/lecture-notes/uni02/node18.html。