c#开关中的变量范围
我试图发送一封电子邮件,其中发件人和收件人的电子邮件地址(以及主题和正文内容)根据提供给该方法的值而变化。最好用代码本身来解释:c#开关中的变量范围,c#,scope,switch-statement,C#,Scope,Switch Statement,我试图发送一封电子邮件,其中发件人和收件人的电子邮件地址(以及主题和正文内容)根据提供给该方法的值而变化。最好用代码本身来解释: public void EmailNotification(int emailAction) { MailAddress to; MailAddress from; string subject; string body; switch (emailAction)
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新手,因此,如果您在这里就如何进行此类操作提出任何建议,我将不胜感激。问题在于您没有初始化变量。如果
emailAction
的值既不是0
也不是1
,变量的值会是什么?它们将未初始化,这是非法的。因此,要么初始化它们,要么在switch语句中添加一个引发异常的default:
子句。要么:
MailAddress to = null;
MailAddress from = null;
string subject = null;
string body = null;
或:
问题是您没有初始化变量。如果
emailAction
的值既不是0
也不是1
,变量的值会是什么?它们将未初始化,这是非法的。因此,要么初始化它们,要么在switch语句中添加一个引发异常的default:
子句。要么:
MailAddress to = null;
MailAddress from = null;
string subject = null;
string body = null;
或:
您需要将变量初始化为默认值,或者在
default
情况下初始化它们。不能保证执行开关情况,因此编译器不知道将初始化值。您需要将变量初始化为默认值,或者在默认情况下初始化它们。开关情况不能保证执行,因此编译器不知道值将被初始化。我认为范围没有问题,但确保值被初始化有问题
将“case2:”替换为“Default:”将允许代码进行编译,并将空值设置为变量(将maildaddress设置为null,将字符串设置为null或“”),但我不建议这样做
简而言之,它失败的原因是,如果emailAction等于、3或除1或2以外的任何值,则switch语句中不会执行任何操作,然后您将尝试在表达式中使用未初始化的变量
有关什么是初始化的更多信息(如果这对您来说太低,请抱歉),请尝试阅读:。我认为范围没有问题,但确保值初始化有问题
将“case2:”替换为“Default:”将允许代码进行编译,并将空值设置为变量(将maildaddress设置为null,将字符串设置为null或“”),但我不建议这样做
简而言之,它失败的原因是,如果emailAction等于、3或除1或2以外的任何值,则switch语句中不会执行任何操作,然后您将尝试在表达式中使用未初始化的变量
有关什么是初始化的详细信息(如果这对您来说太低,请抱歉),请尝试阅读:。您不能在切换之前声明MailMessage
对象,然后使用message.To=new mailmaddress(“…”)
在开关内部?您不能在开关之前声明MailMessage
对象,然后使用message.To=newmaildaddress(“…”)代码>开关内部?