2012-05-29 46 views
1

我试图发送一封电子邮件,其中发件人和收件人电子邮件地址(以及主题和正文内容)根据提供给该方法的值发生更改。这可能是最好的代码本身的解释:c#开关中的变量范围

public void EmailNotification(int emailAction) 
    { 

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

     switch (emailAction) 
     { 
      case 1: 
       // Comment approved 
       to = new MailAddress("[email protected]"); 
       from = new MailAddress("[email protected]"); 
       subject = "Comment approved"; 
       body = @"The comment you posted has been approved"; 
       break; 
      case 2: 
       // Comment rejected 
       to = new MailAddress("[email protected]"); 
       from = new MailAddress("[email protected]"); 
       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()); 
     } 
    } 

所以问题是,由于范围与交换机的工作方式,对,发件人,主题等值不开关以外的认可,即使我已经在开关外面宣布了它们(可能是错误的?)。

我是一个.NET新手,所以任何有关如何完成这种事情的建议都将不胜感激。

+0

难道你不能在交换机之前声明'MailMessage'对象,然后使用'message.To = new MailAddress(“....”);'在交换机内部吗? – dtsg

回答

3

问题是你没有初始化变量。如果emailAction的值不是01,那么变量的值是多少?他们将被初始化,这是非法的。因此,无论对它们进行初始化,或添加default:子句抛出异常的switch语句。或者:

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

或者:

switch (emailAction) 
{ 
    ... 
    default: throw new InvalidOperationException("Action not recognized: " + emailAction); 
} 
+0

downvoter照顾解释? –

1

您需要将变量初始化为默认值,或在default情况下对它们进行初始化。开关情况不能保证执行,所以编译器不知道这些值将被初始化。

1

我不认为有范围问题,但确保值初始化的问题。将“空白值”设置为空(将MailAddresses设置为空,将字符串设置为空或“”),但我不推荐使用“默认值:”替换“案例2:”将允许编译代码那。

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

有关初始化的更多信息(如果这对您而言太低级别,请对照),请尝试阅读:http://www.inf.unibz.it/~calvanese/teaching/06-07-ip/lecture-notes/uni02/node18.html